首页 文章

如何从命令行运行Powershell脚本并将目录作为参数传递

提问于
浏览
44

我的Powershell脚本,Foo.ps1:

Function Foo($directory)
{
    echo $directory
}

if ($args.Length -eq 0)
{
    echo "Usage: Foo <directory>"
}
else
{
    Foo($args[0])
}

从Windows控制台:

powershell -command .\Foo.ps1

结果:“术语' . \ Foo.ps1'未被识别为cmdlet,函数,脚本文件或可操作程序的名称 . 检查名称的拼写,或者如果包含路径,请验证路径是正确的,然后再试一次 . “

尽管Foo.ps1位于我调用Powershell的当前目录中 . 然后我试着调用它来指定脚本文件的完整路径;因为这条路径包含一个空间我相信我必须以某种方式引用它 . 此外,我需要将参数传递给脚本,该脚本也是包含一个或多个空格的文件名 . 无论我尝试什么,我都无法让它发挥作用 . 到目前为止,这是我最好的猜测:

powershell -command "'C:\Dummy Directory 1\Foo.ps1' 'C:\Dummy Directory 2\File.txt'"

这在表达式或语句中给出了错误“Unexpected token'C:\ Dummy Directory 2 \ File.txt' . 在行:1 char:136” .

编辑:我找出了原因

powershell -command .\Foo.ps1

不工作 . 这是因为我的Microsoft.PowerShell_profile.ps1文件有

cd C:\

所以,一旦powershell启动它就会改变目录 .

5 回答

  • 2

    试试这个:

    powershell "C:\Dummy Directory 1\Foo.ps1 'C:\Dummy Directory 2\File.txt'"
    
  • 1

    您正在调用脚本文件而不是命令,因此您必须使用-file,例如:

    powershell -executionPolicy bypass -noexit -file "c:\temp\test.ps1" "c:\test with space"
    

    对于PS V2

    powershell.exe -noexit &'c:\my scripts\test.ps1'
    

    (查看此technet页面的底部http://technet.microsoft.com/en-us/library/ee176949.aspx

  • 15

    使用标志 -Command ,您可以执行整个PowerShell行,就好像它是PowerShell提示符中的命令一样:

    powershell -Command "& '<PATH_TO_PS1_FILE>' '<ARG_1>' '<ARG_2>' ... '<ARG_N>'"
    

    这解决了我在Visual Studio Post-Build和Pre-Build事件中运行PowerShell命令的问题 .

  • 36

    Change your code to the following :

    Function Foo($directory)
        {
            echo $directory
        }
    
        if ($args.Length -eq 0)
        {
            echo "Usage: Foo <directory>"
        }
        else
        {
            Foo([string[]]$args)
        }
    

    然后将其调用为:

    powershell -ExecutionPolicy RemoteSigned -File“c:\ foo.ps1”“c:\ Documents and Settings”“c:\ test”

  • 36

    在ps1文件的顶部添加param declation

    test.ps1

    param(
      # Our preferred encoding
      [parameter(Mandatory=$false)]
      [ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
      [string]$Encoding = "UTF8"
    )
    
    write ("Encoding : {0}" -f $Encoding)
    

    result

    C:\temp> .\test.ps1 -Encoding ASCII
    Encoding : ASCII
    

相关问题