我想在一个可以更新的文件中创建一组别名,然后调用别名aa
,以便执行该文件,并在当前会话中为我提供新的别名。最终,我希望这些别名在PS启动时自动可用,所以我使用的是C:\Users\Administrator\Documents\WindowsPowerShell\Microsoft。PowerShell\u配置文件。ps1
将它们放入。现在看来:
$psdir="C:\Users\Administrator\Documents\WindowsPowerShell"
function Reload-Profile{
# . ${profile} DOES NOT WORK
# Write-Host ${profile}
# Write-Host $profile
# powershell $profile DOES NOT WORK
# Get-ChildItem "${psdir}\*.ps1" | %{.$_} DOES NOT WORK
Write-Host "Custom PowerShell Environment Loaded"
}
function Edit-Profile
{
powershell_ise.exe $profile
}
Set-Alias show Get-ChildItem
Set-Alias show2 Get-ChildItem
Set-Alias aa Reload-Profile
Set-Alias ep Edit-Profile
我如何做到这一点,以便在启动时加载别名,同时也可以使用aa
别名更新别名,并将其带到当前会话中?
代码的问题是,reloadprofile
是一个函数,当您调用它时,它将为自己创建新的作用域。然后调用$profile
,它不会为profile创建新的作用域,但仍会在重新加载profile
作用域内调用它。因此,当重新加载配置文件
结束时,范围将被丢弃。因此,您还需要使用点调用操作符调用重新加载配置文件
:
。重新加载配置文件
或。aa
,如果您使用别名。
我假设,您真正的问题是“如何以一种不需要使用点调用运算符的方式生成
aa
命令?”
答案是使用编译的cmdlet而不是PowerShell函数,因为PowerShell不会为cmdlet调用创建新范围。然后,cmdlet可以在当前范围中调用
.$file
。
Add-Type @‘
using System.Management.Automation;
using System.Management.Automation.Runspaces;
[Cmdlet("Reload", "Profile")]
public class ReloadProfileCmdlet : PSCmdlet {
protected override void EndProcessing() {
InvokeCommand.InvokeScript(
". $profile",
false,
PipelineResultTypes.Output | PipelineResultTypes.Error,
null
);
}
}
’@ -PassThru | Select -First 1 -ExpandProperty Assembly | Import-Module
Set-Alias aa Reload-Profile
P. S.
我建议您使用不同的动词,而不是Reload
,因为Reload
不包含在推荐动词列表中,因此当您导入Reload-Profile
时会发出警告进入你的疗程。
如果包含以下代码的评论的原始作者决定将其作为答案发布,只需在该答案中添加评论,我将删除它。因为已经两天了,我真的不指望他会。与此同时,这应该让人们更好地了解实际发生了什么。
# https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/add-type
# Create a new cmdlet Reload-Profile using C# code and import it
Add-Type '
using System.Management.Automation;
using System.Management.Automation.Runspaces;
// https://msdn.microsoft.com/en-us/library/dd878294(v=vs.85).aspx
[Cmdlet("Reload", "Profile")]
public class ReloadProfileCmdlet : PSCmdlet {
protected override void EndProcessing()
{
// https://msdn.microsoft.com/en-us/library/ms568378(v=vs.85).aspx
// Runs $profile without parameters in the current context and displays the output and error
InvokeCommand.InvokeScript(". $profile", false, PipelineResultTypes.Output | PipelineResultTypes.Error, null);
}
}' -PassThru | Select -First 1 -ExpandProperty Assembly | Import-Module;
# Setup an alias for the new cmdlet
Set-Alias aa Reload-Profile
为了更好的可读性/突出显示C#代码独立:
using System.Management.Automation;
using System.Management.Automation.Runspaces;
// https://msdn.microsoft.com/en-us/library/dd878294(v=vs.85).aspx
[Cmdlet("Reload", "Profile")]
public class ReloadProfileCmdlet : PSCmdlet {
protected override void EndProcessing()
{
// https://msdn.microsoft.com/en-us/library/ms568378(v=vs.85).aspx
// Runs $profile without parameters in the current context and displays the output and error
InvokeCommand.InvokeScript(". $profile", false, PipelineResultTypes.Output | PipelineResultTypes.Error, null);
}
}
我想创建一个的,在我关闭Powershell的当前会话后不会过期,假设我有这个别名: 这完美地创建了别名,但我想在关闭当前会话后使用它,我如何才能实现这一点。 注: PowerShell帮助系统建议我可以导出我创建的别名,并在下次打开新会话时导入它们,实际上这并不是我想要的,因为,在我通过不同会话创建别名后,有没有直接明确的方法保持别名
本文向大家介绍如何使用PowerShell创建新别名?,包括了如何使用PowerShell创建新别名?的使用技巧和注意事项,需要的朋友参考一下 任何人都可以创建一个新的别名,该别名是另一个命令的快捷方式。若要创建自己的别名,您需要使用Set-Alias cmdlet。在这里,我们将创建一个新的别名Edit,它将打开一个Notepad.exe。首先,我们将检查是否存在“编辑别名”。 由于这将是一个新
我正在尝试使用这个google sheets append api批量更新值。过去我用它进行单行更新,这很好,但我有一个大数据集,我想分块追加。使用 https://sheets.googleapis.com/v4/spreadsheets/$MYSHEETID/值/外部曝光!A1: B10: append?INSERT_ROWS 使用API浏览器,这是google期望的JSON,请注意,值是一个
本文向大家介绍Windows Powershell 创建数组,包括了Windows Powershell 创建数组的使用技巧和注意事项,需要的朋友参考一下 在Powershell中创建数组可以使用逗号。 对于连续的数字数组可以使用一个更快捷的方法 数组的多态 象变量一样如果数组中元素的类型为弱类型,默认可以存储不同类型的值。 空数组和单元素数组 空数组 1个元素的数组
我正在开发一个java应用程序来创建elasticSearch索引。索引目前每周在一台开发机器上构建,集群在其他(测试和prod)机器上的现有集群上手动复制。新的方案仍然包括每周从头开始重建指数。 我正在使用5.6.3和Low-High level rest客户端进行更新。经过一些初步的调查(并得到相当多的帮助),我的目标是去一个2(或3)阶段的开发使用别名。 首先,我将在dev上为现有索引(es
为了在我们的JUnit测试中使用H2数据库而不是调用Oracle,我被阻止在H2上创建别名以模拟一些Oracle兼容性: > 我首先为日期到字符的转换声明了to_char的别名:可以