2013年6月25日火曜日

◆CSVファイルのハッシュテーブル化

昔、ほぼ同じことを以下でやっているが忘れていたのでメモ。
PowerShell: ◆カスタマイズした条件を使ってグルーピングする(Group-Object)

 

以下のようなCSVファイルを読み込んで、ハッシュテーブル化すると各項目をダイレクトに参照出来て便利だよってお話。
image

001
002
003
004
005

$content = Import-Csv "F:\Desktop\Servers.csv"
$hash = $content |
 
 
Group-Object -AsHashTable -AsString -Property Name
$hash["sv4"].OS
$hash.sv3.SP

image

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

2013年6月3日月曜日

◆所属するドメインユーザーグループを表示する

>([wmi]"Win32_userAccount.Domain='ad',Name='hogeUser'").GetRelated('Win32_Group')

image

ローカルマシン上のグループにも属している場合は、ローカルグループも表示される。