为什么赢了';此powershell脚本是否接受参数? myscript.ps1 CMD.exe

为什么赢了';此powershell脚本是否接受参数? myscript.ps1 CMD.exe,powershell,parameters,Powershell,Parameters,输出: cmdlet myscript.ps1 at command pipeline position 1 Supply values for the following parameters: computerName: ddd arg0: ddd 命令管道位置1处的cmdlet myscript.ps1 提供以下参数的值: 电脑名称:ddd arg0: ddd 我只是想在CMD中使用Powershell参数,但我似乎无法获得一个脚本。我看到一些网站说在脚本前

输出:

cmdlet myscript.ps1 at command pipeline position 1 Supply values for the following parameters: computerName: ddd arg0: ddd 命令管道位置1处的cmdlet myscript.ps1 提供以下参数的值: 电脑名称:ddd arg0: ddd 我只是想在CMD中使用Powershell参数,但我似乎无法获得一个脚本。我看到一些网站说在脚本前面加上
\
,但这没有帮助。我添加了必选行,以查看Powershell是否正在读取参数,显然不是。参数
computerName
显然是单词“hey”。
Param
块是脚本中的第一件事。Powershell似乎可以识别参数
computerName
,但无论我如何输入命令,它都不会认为我实际输入了参数


我的语法到底出了什么问题?

位置值应该是基于0的(第一个参数为0)。也就是说,我无法复制您在PowerShell 2.0或3.0上看到的内容。

位置值应基于0(第一个参数为0)。也就是说,我无法复制您在PowerShell 2.0或3.0上看到的内容。

默认情况下,PowerShell不会运行在您当前目录中碰巧找到的脚本。这是微软的一个安全特性,我相信它模仿了unix shell中的行为

Powershell将运行在搜索路径中找到的脚本。您的搜索路径存储在
$env:path

我怀疑您在搜索路径上的其他目录中有一个名为“myscript.ps1”的脚本

我以前也遇到过这种情况。我看到的症状是参数列表似乎与我定义的不同。每个脚本都有一个不同的参数列表,所以当我给它提供一个用于另一个脚本的参数列表时,脚本崩溃了。我的习惯是不依赖于参数位置,所以这个问题很容易找到

在脚本“.\myscript.ps1”中添加“\”将强制shell使用当前目录中的.ps1文件。作为测试,我将指定您试图执行的文件的完整路径(如果路径中有空格,请确保将路径用“引号”括起来),或者将其更改为某个完全疯狂的名称,该名称不会被其他文件复制(如“crazyfishpants.ps1”),并查看shell是否仍能找到该文件


如果有一个函数(“get Foo”)从模块或概要文件中加载,并且与脚本文件(“get Foo.ps1”)同名,则可能会遇到类似的问题。您可能会运行一些您不想要的东西。

默认情况下,Powershell不会运行在当前目录中碰巧找到的脚本。这是微软的一个安全特性,我相信它模仿了unix shell中的行为

Powershell将运行在搜索路径中找到的脚本。您的搜索路径存储在
$env:path

我怀疑您在搜索路径上的其他目录中有一个名为“myscript.ps1”的脚本

我以前也遇到过这种情况。我看到的症状是参数列表似乎与我定义的不同。每个脚本都有一个不同的参数列表,所以当我给它提供一个用于另一个脚本的参数列表时,脚本崩溃了。我的习惯是不依赖于参数位置,所以这个问题很容易找到

在脚本“.\myscript.ps1”中添加“\”将强制shell使用当前目录中的.ps1文件。作为测试,我将指定您试图执行的文件的完整路径(如果路径中有空格,请确保将路径用“引号”括起来),或者将其更改为某个完全疯狂的名称,该名称不会被其他文件复制(如“crazyfishpants.ps1”),并查看shell是否仍能找到该文件


如果有一个函数(“get Foo”)从模块或概要文件中加载,并且与脚本文件(“get Foo.ps1”)同名,则可能会遇到类似的问题。您可能会运行一些您不想运行的东西。

谢谢大家提供的信息丰富的回复。我的问题在提交之前似乎被稍微编辑了一下,因为这段文字让您相信我是直接在Powershell中输入此命令的

我实际上是在CMD中为脚本运行命令,这完全解释了为什么它没有向Powershell脚本传递参数。不管是谁提出了我的问题,都可能将C:\>改为PS>认为我打错了

我假设如果我可以直接从CMD运行脚本,我可以在CMD的命令行上向它发送参数,但显然不是这样。如果我在Powershell中运行脚本,它确实可以正常工作,我现在看到了

我的最终目标是允许用户从CMD运行Powershell脚本。看起来我可以创建一个接受参数的批处理文件,然后启动powershell并将这些参数发送到PS脚本。因此,在批处理文件中,我应该执行以下操作:

powershell -File C:\myscript.ps -computerName %1

这个谜团可能在这个网站上被破解了100多次,我为这一困惑道歉。再次感谢您的回复。

感谢大家提供的信息丰富的回复。我的问题在提交之前似乎被稍微编辑了一下,因为这段文字让您相信我是直接在Powershell中输入此命令的

我实际上是在CMD中为脚本运行命令,这完全解释了为什么它没有向Powershell脚本传递参数。不管是谁提出了我的问题,都可能将C:\>改为PS>认为我打错了

我假设如果我可以直接从CMD运行脚本,我可以在CMD的命令行上向它发送参数,但显然不是这样。如果我在Powershell中运行脚本,它确实可以正常工作,我现在看到了

我的最终目标是允许用户从CMD运行Powershell脚本。信息技术 cmdlet myscript.ps1 at command pipeline position 1 Supply values for the following parameters: computerName: ddd arg0: ddd
powershell -File C:\myscript.ps -computerName %1