Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/android-studio/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何为Foreach对象中的一组命令设置别名?_Powershell - Fatal编程技术网

Powershell 如何为Foreach对象中的一组命令设置别名?

Powershell 如何为Foreach对象中的一组命令设置别名?,powershell,Powershell,我正在尝试为所有现有powershell命令设置别名,以从名称中排除连字符。Get Alias将化名为GetAlias。我厌倦了通过下面的代码来实现它,但是这似乎不起作用。函数执行完成时没有任何错误,但是当我使用alias cmd检查新别名时,没有创建任何内容。当我在循环外部尝试设置别名时,它可以工作,但在循环内部则不行。你知道我在下面的代码中有什么地方做得不对吗?我还尝试了Foreach对象{//my code here},但也没有成功 我正在使用powershell 5.1版 使用set a

我正在尝试为所有现有powershell命令设置别名,以从名称中排除连字符。Get Alias将化名为GetAlias。我厌倦了通过下面的代码来实现它,但是这似乎不起作用。函数执行完成时没有任何错误,但是当我使用alias cmd检查新别名时,没有创建任何内容。当我在循环外部尝试设置别名时,它可以工作,但在循环内部则不行。你知道我在下面的代码中有什么地方做得不对吗?我还尝试了Foreach对象{//my code here},但也没有成功

我正在使用powershell 5.1版


使用set alias时,您是在一个范围内执行此操作的。由于您在函数中使用它,这些别名仅在您立即退出的函数中有效。您必须通过-scope参数设置作用域。

使用set alias时,您是在一个作用域内进行设置的。由于您在函数中使用它,这些别名仅在您立即退出的函数中有效。您必须通过-scope参数设置作用域。

它不起作用是什么意思?有错误吗?是因为别名容量吗?无法创建类似:Set Alias:Alias SetExecutionPolicy的内容,因为此作用域的别名容量已超过4096。我怀疑您的-Value$cmd是问题所在。这个参数应该是一个字符串,但您发送的是一个复杂的对象。@robdy-我更新了这个问题,以详细说明在我的例子中“不工作”是什么意思。不,我没有任何错误@Lee_Dailey-我也试过$cmd.Name,但也没有用。@NoSaidTheCompiler-你试过将代码作为脚本运行吗?而不是在函数中运行吗?您可能会看到范围问题。//此外,您在名称中没有连字符的命令上运行此命令,并且可能在同一命令名上运行多次,因为Get命令调用可能会读取不同模块的旧版本。当我运行just Get命令时,我有八份更新模块…@anish-我误读了你的测试。[脸红]我以为你测试的是1而不是-1。我将使用$.\u.Name-match'-'作为测试,使用$.\u Name.Replace''作为删除。我的理解是,.IndexOf方法对于大量的项来说非常慢,.Remove方法也是如此。你说它不工作是什么意思?有错误吗?是因为别名容量吗?无法创建类似:Set Alias:Alias SetExecutionPolicy的内容,因为此作用域的别名容量已超过4096。我怀疑您的-Value$cmd是问题所在。这个参数应该是一个字符串,但您发送的是一个复杂的对象。@robdy-我更新了这个问题,以详细说明在我的例子中“不工作”是什么意思。不,我没有任何错误@Lee_Dailey-我也试过$cmd.Name,但也没有用。@NoSaidTheCompiler-你试过将代码作为脚本运行吗?而不是在函数中运行吗?您可能会看到范围问题。//此外,您在名称中没有连字符的命令上运行此命令,并且可能在同一命令名上运行多次,因为Get命令调用可能会读取不同模块的旧版本。当我运行just Get命令时,我有八份更新模块…@anish-我误读了你的测试。[脸红]我以为你测试的是1而不是-1。我将使用$.\u.Name-match'-'作为测试,使用$.\u Name.Replace''作为删除。我的理解是,.IndexOf方法的速度非常慢,包含大量的项,.Remove方法也是如此。如果你添加一个示例,你的答案将更有价值。如果你添加一个示例,你的答案将更有价值。
function _removeHyphenFromCommmands {
        $commands = Get-Command;
        foreach ($cmd in $commands) {
            $hyphenIndex = $cmd.Name.IndexOf("-");
            if ($hyphenIndex -gt -1) {
                $aliasName = $cmd.Name.Remove($hyphenIndex, 1);
                Set-Alias -Name $aliasName -Value $cmd -Description "hyphenless";
            }
        }
    }