当前位置: 首页 > 知识库问答 >
问题:

为创建powershell别名$轮廓

葛桐
2023-03-14

我想在一个可以更新的文件中创建一组别名,然后调用别名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别名更新别名,并将其带到当前会话中?

共有2个答案

滕成双
2023-03-14

代码的问题是,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时会发出警告进入你的疗程。

长孙兴德
2023-03-14

如果包含以下代码的评论的原始作者决定将其作为答案发布,只需在该答案中添加评论,我将删除它。因为已经两天了,我真的不指望他会。与此同时,这应该让人们更好地了解实际发生了什么。

# 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的别名:可以