2013年6月24日月曜日

◆別の資格情報で管理者として実行する2

タスクスケジューラに登録されたタスクの一覧を表示するスクリプトがあったので試してみた。

それ自体は特に問題はない。

複数サーバーのタスクをクライアントから覗けるとベターかと思うのだが、昇格した管理者権限が要求される。

以前PowerShell: ◆別の資格情報で管理者として実行するでちょっとやったのだが、もう一度ちゃんと調べてみたところPowerShellをネストして呼び出すというのが主流のようだ。(別の資格情報でPowerShellを起動し、その中でまたPowerShellを起動し昇格してコマンド実行)

コマンドを単独で実行するサンプルはあったのだが、スクリプトブロックを実行するサンプルが見当たらなかったため試行錯誤で作ってみた。

文字列の扱いが面倒で、都度エラーに対処しながら書いたのでスマートな書き方では無いかもしれない。(前回同様パスワードは予め保存しているものを使っている)

$password = ConvertTo-SecureString (gc f:\myPass)

$cred =

  New-Object System.Management.Automation.PsCredential "ad\adm",$password

 

 

$cmd = {

    $computers = 'hoge-sv','v064'  #対象サーバー

    $service = New-Object -ComObject Schedule.Service

    $computers | %{

    $service.Connect($_)

    $folder = $service.GetFolder('\')

    $tasks = $folder.GetTasks(1)

    Write-Host 'ComputerName = ' $_ -ForegroundColor Yellow

    $tasks | ft Name, Enabled, LastRunTime, LastTaskResult, NextRunTime -auto

  }

}

 

$sc =

  "-command &{Start-Process PowerShell -ArgumentList {-noexit -command $cmd} -Verb runas }"

Start-Process -Credential $cred  -FilePath PowerShell.exe -ArgumentList $sc 

image

0 件のコメント:

コメントを投稿