web-dev-qa-db-ja.com

PowerShellでリモートプロセスを開始する方法

私は問題を抱えています、私はscriptを持っています:

  • PSSessionに接続します(管理者アカウントでPSSessionを使用します)
  • 2プロセスを停止します
  • それらのファイルを変更してください
  • 2つのプロセスを開始します(ここで問題が発生します)

サーバーでプロセスを開始したいので、PSSessionに接続します(問題ありません)

Invoke-Commandを実行します:

# $pathProg path to my program
Invoke-Command -session $mySession -command {Start-Process $($args[0])} -ArgumentList $pathProg

しかし、それは何もしません(私はVNCで確認します)

私もInvoke-Commandを実行します:

# $pathProg path to my program
Invoke-Command -session $mySession -command {&$($args[0])} -ArgumentList $pathProg

プログラムを起動します(良い)が、私のスクリプトは終了プログラムを待ちます(良くない)

誰かアイデアがありますか?

ありがとう

7
Servuc

WMIを使用してみることができます。

$command = "notepad.exe"
$process = [WMICLASS]"\\$CompName\ROOT\CIMV2:win32_process"
$result = $process.Create($command) 

資格情報を渡す必要がある場合:

$cred = get-credential
$process = get-wmiobject -query "SELECT * FROM Meta_Class WHERE __Class = 'Win32_Process'" -namespace "root\cimv2" -computername $CompName -credential $cred
$results = $process.Create( "notepad.exe" )
12
CB.

$pathProgは、最終的に実行されるスクリプトブロック内では使用できない場合があります。スクリプトブロックに引数として渡すことをお勧めします

Invoke-Command -session $mySession -command { param($progPath) ... } -argumentlist $progPath

外側の-argumentlist、引数をscriptblockに渡します。

0
manojlds

コマンドを文字列としてローカルで作成し、それをScriptBlockとしてInvoke-Commandスクリプトに渡してみましたか?

$remoteSession = New-PSSession -ComputerName 'MyServer'
$processName = 'MyProcess'

$command = 'Start-Service ' + $processName + ';'

Invoke-Command -Session      $remoteSession `
               -ScriptBlock  ([ScriptBlock]::create($command))

Remove-PSSession $remoteSession

リモートサーバーからのフィードバックが必要な場合は、次のようにWrite-Outputを介して出力を取得できます。

$command = 'Start-Service ' + $processName + ' | Write-Output ;'
0
antonyoni