通常、PowerShellコマンドはセミコロンで連鎖できます。以下は2つのメモ帳を開きます。特別なPowerShell 4コマンドプロンプトでコマンドをチェーンする方法は?
PS> notepad; notepad
あなたは、より複雑な文を、連鎖することができます
PS> Add-Type -AssemblyName System.IO.Compression; `
> $src = "C:\aFolder"; $zip="C:\my.zip"; `
> [io.compression.zipfile]::CreateFromDirectory($src, $zip)
チェインドPowerShellコマンド もCMDコマンドラインから呼び出すことができます。
C:\> powershell notepad; notepad
This postには、.Net 2.0がお使いのOSのアクティブなフレームワークであっても、.Net 4.0 PowerShellプロンプトを作成する方法が記載されています。 .cmdスクリプトを作成して実行します。今あなたは.Net 4.0環境にいます。
連鎖は、その4.0プロンプトで動作します。
C:\> ps4.cmd
PS> notepad; notepad
も標準CMDプロンプトから動作します:
C:\> ps4 notepad; notepad
This postは、4.0を参照するために必要な明示的なパス名(へAdd-Type
を行う方法を説明しps4プロンプトからのアセンブリ):
Add-Type -Path "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.IO.Compression.FileSystem\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.FileSystem.dll"
:
C:\> ps4
PS> Add-Type -Path "C:\x\System.IO.Compression.FileSystem.dll"; `
> $src = "C:\x\xl"; $zip="C:\x\xl.zip"; `
> [io.compression.zipfile]::CreateFromDirectory($src, $zip)
問題:PS4プロンプトで連鎖した場合にも、働くPS4は(ポストの下部に全額エラー)標準のコマンドプロンプトで起動したときに上記のステートメントの連鎖が失敗します
C:\> ps4 Add-Type -Path "C:\x\System.IO.Compression.FileSystem.dll"; $src = "C:\x\xl"; $zip="C:\x\xl.zip"; [io.compression.zipfile]::CreateFromDirectory($src, $zip)
しかし、上記のすべての方法が機能します。どうして?どうすればこの作品を作れますか?デイジーチェーン接続コマンドがpowershell.exe
に渡されたときに、文字列の周り
The term 'C:\x\xl' 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. At line:1 char:73 + Add-Type -Path C:\x\System.IO.Compression.FileSystem.dll; $src = C:\x\xl <<<< ; $zip=C:\x\xl.zip; [io.compression.zipfile]::CreateFromDirectory($src, $zip) + CategoryInfo : ObjectNotFound: (C:\x\xl:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException The term 'C:\x\xl.zip' 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. At line:1 char:91 + Add-Type -Path C:\x\System.IO.Compression.FileSystem.dll; $src = C:\x\xl; $zip=C:\x\xl.zip <<<< ; [io.compression.zipfile]::CreateFromDirectory($src, $zip) + CategoryInfo : ObjectNotFound: (C:\x\xl.zip:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException Exception calling "CreateFromDirectory" with "2" argument(s): "The path is not of a legal form." At line:1 char:138 + Add-Type -Path C:\x\System.IO.Compression.FileSystem.dll; $src = C:\x\xl; $zip=C:\x\xl.zip; [io.compression.zipfile]::CreateFromDirectory <<<< ($src, $zip) + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException
awesome!あなたのソリューションは動作します:二重引用符をエスケープするか、またはシングルを使用します。私は適切なスクリプトを使いたいのですが、どうすればいいのか分かりません。私の使用例は:私はVBからの単一のステートメントでプロセス全体を実行する必要があります。複数のステートメントでPS4.cmdを呼び出すと、独立したセッションになります.1つの呼び出しでアセンブリを追加すると、後続の呼び出しに接続できなくなります。また、私はVBコードでコマンドを埋め込む必要がありますので、 ';で連鎖することはVBでスクリプトを埋め込むよりも便利で、スクリプトをバッチファイルに保存してからスクリプトを実行する方が便利です。どうも! –
私はあなたの答えをここにリンクしました:http://stackoverflow.com/a/39800779/209942 –