0

起動時に実行される PowerShell スクリプトが 2 つあります。1 つは自分の管理下にあり、もう 1 つは管理外です。

どちらのスクリプトも Start-Process を使用しています。奇妙な問題は、両方の Start-Process が同時に実行されると、スクリプトから次のエラーが発生することです。

Start-Process : This command cannot be run due to the error: An instance of the service is already running.

別の「開始プロセス」が既に実行されているかどうかを確認する方法はありますか? 「Get-Process」については知っていますが、現在実行中のコマンドレットではなく、実行中の PowerShell のみが表示されます。

私は Start-Process を使用しないことに賛成ではありません。

一時的な回避策として、スクリプトに 60 秒間スリープするように指示しましたが、他の Start-Process がいつ完了したかを知る必要があります。

これが私のコードです:

$pw = ConvertTo-SecureString -AsPlainText -Force -String "myPassword"
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "Administrator",$pw

$psArgList = "-ExecutionPolicy Bypass","-file"
$psArgList += $args

Start-Process powershell.exe -Wait -Credential $cred -ArgumentList $psArgList

これにより、別の PowerShell スクリプトを完全な権限で実行できます。管理者として、ExecutionPolicy を Bypass として使用します。

4

1 に答える 1

1

代替案を提案したいと思います。ログイン時にこれを実行している場合は、タスク スケジューラから実行して、資格情報を使用するアカウントとして実行してみませんか? タスクを作成するときは、いくつか設定する必要があります。

[全般] タブで

  • タスクを実行するアカウントを選択します
  • 「ユーザーがログオンしているかどうかにかかわらず実行する」ように指示します
  • 「最高の権限で実行」を選択

[トリガー] タブ

  • 「ログオン時」にイベントが発生するようにトリガーを作成し、ユーザーを選択するか、任意のユーザーに対して発生するようにします (デフォルト)

[アクション] タブ

  • アクションを作成する
  • アプリケーションの場合は、単に powershell.exe を入力します (必要に応じてフル パスを使用します)。
  • 「-ExecutionPolicy Bypass -File」のように、引数フィールドに引数を入力します。

次に、[OK] を押します。スクリプトを実行しようとしているアカウントのパスワードの入力を求められ、Windows がそこから管理します。

于 2014-09-23T22:59:43.003 に答える