3

テキスト ファイルから取得した Powershell コマンドを正常に実行する .net アプリケーションがありますが、より複雑で if 条件を含むものを試してみました。スクリプトは PS コンソールから正しく動作しますが、.NET では、スクリプトの文字列を渡す方法しか知りません。ファイルを読み取った後、vblf などの余分なものが追加され、それを取り出しても動作しません。 . これは可能ですか?

.NET ランタイム エラー: サーバーは要求を処理できませんでした。---> 「False」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。

.NET コード:

'Grab Powershell script from text (.ps1) file
strScript = File.ReadAllText(ScriptFileName)

'inject the arguments into the script
strScript = InsertArguments(strScript, Arguments)

'Open the runspace and create a pipeline if it's not already open
If psRunspace.RunspaceStateInfo.State = RunspaceState.BeforeOpen Then
  psRunspace.Open()
End If

Dim MyPipeline As Pipeline = psRunspace.CreatePipeline()
MyPipeline.Commands.AddScript(strScript)
Dim psResults As Collection(Of PSObject) = MyPipeline.Invoke()

ps1 ファイルに保存されている Powershell Script :

new-mailbox -name $argument1 -DisplayName $argument1 -UserPrincipalName $argument2 Room -DomainController $argument5
if ($argument4 -eq "False") {
   Set-CalendarProcessing $argument1 -BookingWindowInDays 400 -DeleteSubject $false -AutomateProcessing autoaccept -AllBookInPolicy $false -BookInPolicy $argument3 -DomainController $argument5        
} else {
   Set-CalendarProcessing $argument1 -BookingWindowInDays 400 -DeleteSubject $false -AutomateProcessing autoaccept -AllBookInPolicy $true -DomainController $argument5
}

このスクリプトが読み込まれると、次の部分文字列が引き込まれstrScriptます。

-Room -DomainController mcexdct1" & vbLf & "if (False -eq "False") {"
4

1 に答える 1

2

PowerShell スクリプトを次のように変更して修正しました。

if ($argument4 -eq "False") {

これに:

if ("$argument4" -eq "False") {

引用符で囲んでも機能します。スクリプト文字列 (vblf など) に表示されていた "ジャンク" は正常だと思います。テキスト ファイルからの読み取りはあまり行いません。

于 2013-02-28T18:29:30.417 に答える