68
PowerShell -Command .\Foo.ps1
  • Foo.ps1:

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

    Powershell を呼び出しているディレクトリにいるにもかかわらずFoo.ps1、次の結果になります。

    The term '.\Foo.ps1' is not recognized as the name of a cmdlet, function, script file, or operable program. 
    Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
    
    • profile.ps1編集:PowerShellが含まれているためにディレクトリを変更していたため、機能していませんでしたcd C:\


次に、スクリプト ファイルへのフル パスを指定して呼び出そうとしましたが、何を試しても動作しません。スクリプトに引数で渡す必要があるファイル名と同様に、パスには空白が含まれているため、パスを引用する必要があると思います。

  • これまでの最良の推測:

    PowerShell -Command "'C:\Dummy Directory 1\Foo.ps1' 'C:\Dummy Directory 2\File.txt'"
    

    出力エラー:

    Unexpected token 'C:\Dummy Directory 2\File.txt' in expression or statement. 
    At line:1 char:136.
    
4

6 に答える 6

61

これを試して:

powershell "C:\Dummy Directory 1\Foo.ps1 'C:\Dummy Directory 2\File.txt'"
于 2012-12-05T14:19:53.083 に答える
54

コマンドではなくスクリプトファイルを呼び出しているため、 -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 )

于 2012-12-05T14:31:38.620 に答える
27

フラグを使用する-Commandと、PowerShell プロンプトのコマンドであるかのように、powershell 行全体を実行できます。

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

これにより、Visual Studio のビルド後のイベントとビルド前のイベントで PowerShell コマンドを実行する際の問題が解決されました。

于 2016-06-13T17:39:57.200 に答える
3

ps1 ファイルの先頭に param 宣言を追加します。

test.ps1

param(
  # Our preferred encoding
  [parameter(Mandatory=$false)]
  [ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
  [string]$Encoding = "UTF8"
)

write ("Encoding : {0}" -f $Encoding)

結果

C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII
于 2016-11-07T00:27:13.260 に答える
2

コードを次のように変更します。

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"

于 2012-12-05T14:54:57.790 に答える