无法将脚本名称识别为cmdlet,函数等; 也不能在简单的脚本上find位置参数

我正在尝试做我的第一个剧本。 为了简单地让PowerShell在记事本中input一个脚本,并保存为名为“test”的.ps1文件(也尝试了Script,但是知道名字与它无关):

Write-Host "Hello, World!" 

在PowerShell中,我打字

 & "C:\Scripts\test.ps1" 

以及

 ./test.ps1 

我只是遇见了这个:

  ./test.ps1.txt:术语'./test.ps1.txt'不被识别为a的名称
 cmdlet,函数,脚本文件或可操作的程序。 检查拼写
名称,或者如果包含path,请validationpath是否正确,然后重试。
在行:1 char:1
 + ./test.ps1.txt
 + ~~~~~~~~
     + CategoryInfo:ObjectNotFound:(./test.ps1.txt:String)[],CommandNotFoundException 

曾尝试用PowerShell重命名文件

 PS C:\Scripts> Rename-Item test.ps1.txt test.ps1 

我已经在RemoteSignedUnrestricted之间切换,我已经尝试了一个代码,包括executionpolicy bypass (我做道歉,我closures了我的窗口,而不写下一个)。 据我所知,一切都是最新的,我正在运行Windows 10,Windows PowerShell和常规的Windows记事本。

Solutions Collecting From Web of "无法将脚本名称识别为cmdlet,函数等; 也不能在简单的脚本上find位置参数"

首先,我强烈建议使用Windows PowerShell ISE来编写脚本。 它是免费的,并提供了一个相当不错的控制台/编辑器的经验,因为它是免费的(据说有更好的那些,但是这一直对我来说很好)。 我使用Visual Studio作为其他的东西,虽然它是一个EXPONENTIALLY更好的产品(应该是),但PowerShell ISE功能非常丰富。

接下来,如果你刚开始,你应该看看Don Jone的“学习PowerShell 3.0在一个月的月份”书。 这是最新版本的两个版本,但是,所有的信息都是相关的,一旦你完成了这本书,你就可以很容易地寻求帮助。 它涵盖了所有的基础知识,是学习语言的第一步。

现在,回答您的问题:PowerShell脚本通常具有.ps1文件扩展名。 其他扩展通常用于Windows PowerShell使用的模块(.psm1)或其他帮助程序内容。 对于大多数情况,您将坚持.ps1,并且当您已经达到了开始需要其他扩展程序的地步时,我怀疑您将无法确定您需要哪些扩展程序。

通常有两种方法调用PowerShell脚本。 第一个来自正常的命令提示符,并告诉PowerShell执行脚本。 如下所示:

 powershell.exe -File MyScript.ps1 

还有一些额外的参数,我建议您使用,但使用量取决于您的要求。 这是我通常在我的标签上:

 powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File MyScript.ps1 

这将告诉PowerShell进程忽略你设置的任何PowerShell配置文件,如果你的配置文件脚本中有一些东西,比如读取控制台输入,这是非常理想的(对于你目前的情况,我会假设你不要,但你可能在将来)。 另一个是ExecutionPolicy之一:RemoteSigned将告诉PowerShell基本上忽略从网站上下载的任何东西,但允许任何来源于你的网络的内容自由运行。 可能不是最好的做法,但是这不是一个可怕的政策,如果你可以相信你的脚本库是安全的。 如果不是这样,则可以选择比这更紧的东西(可以通过在PowerShell提示符中键入“Get-Help about_Execution_Policies”或通过访问关于它们的TechNet页面来了解执行策略 – 如果不相同,内容应该相似) 。

第二种方法来自Windows PowerShell脚本内部。 这实际上要容易得多。 请注意,您必须将您的执行策略设置为允许脚本运行的内容,但此后您将顺利启动。

 . .\MyScript.ps1 

这就是所谓的“点源”你的脚本。 在Windows PowerShell中执行此操作的优点是,如果您有一些类似脚本的函数,它们将被添加到当前作用域(Get-Help about_Scopes)中,这意味着它们现在可用于当前会话中。 一个很好的例子就是在你使用主脚本分发的脚本中定义一个名为“Test-DomainConnection”的函数:你将使用主脚本来分发脚本(这通常是在你将“标准“主脚本中的PowerShell函数),然后使用主脚本中的函数。 这种方法有优点和缺点,但似乎一般建议(可能有一些社区扩展,无需手动管理这一点)。

有关其他信息,可以从Windows PowerShell中调用Get-Help about_Scripts 。 由于您使用的是Windows 10,因此可能需要在管理PowerShell窗口中运行Update-Help,然后帮助内容在本地系统上可用。

如果您还有其他问题,请随时给我发邮件:)我已经在做PowerShell一段时间了,可能会有所帮助。