2022年8月19日金曜日

◆引数の数が可変の場合

変数で受け取った値を引数に使ってコマンドを呼び出す場合などに、省略された場合を考慮しないといけない。

  Send-MailMessage    -To $to                                       `

  -Cc $cc                                       `

  -From $from                  `

  -Subject $subject                                        `

  -SmtpServer $mailServer                                 `

  -Body $body                                 `

  -Attachments $attachment                    `

  -Encoding  ([System.Text.Encoding]::Default)     

こんなケースで$attachmentに値が入ってこないとエラーになる。

だからと言って引数の組み合わせの分だけコマンドを用意するのも・・・。

なんか簡単に解決できる方法がありそうにも思うが、見つからなかったのでとりあえず以下の様にしてみた。

  $param = @{

"To" = $to

"Cc" = $cc

"From" = $from

"Subject" = $subject

"SmtpServer" = $mailServer

"Body" = $body

"Attachments" = $attachment

"Encoding" = [System.Text.Encoding]::Default

  }

if($attachment -eq ""){$param.Remove("Attachments")}

Send-MailMessage @param

2022年4月15日金曜日

◆2022/04/15 消せないフォルダー(ファイル)対策

アクセス権が無くて管理者でも消せなくなるフォルダー(ファイル)がある場合。
(移動プロファイルのフォルダーとか普通になっても管理者がアクセスできなくなる)

所有権を取れれば問題ないのだがGUIからは所有権も取れない場合もある。

そんな時は以下のコマンドで、

takeown /f c:\users\username /r /d y 

2022年4月6日水曜日

◆2022/04/06 ADユーザーのCNを更新する

 $dn = (Get-ADUser -Identity "testUser").DistinguishedName
Rename-ADObject $dn -NewName "新氏名"

2022年2月14日月曜日

◆2022/02/14 連想配列と一緒にフォーマット演算子のプレースフォルダを使う

ADのサブネットをコマンド設定するときに「New-ADObject」を使うようなのだが、その中で以下の様なプロパティがある

-OtherAttributes @{location="Building A";siteObject="CN=HQ,CN=Sites,CN=Configuration,DC=FABRIKAM,DC=COM"}


サブネットがたくさんあるとループしながらフォーマット演算子で可変部分を入れ替えてとなるのだが、フォーマット演算子と連想配列を一緒に使うとエラーとなる。

{}の扱いがよろしくない。


連想配列側の括弧を2重にすると良いようだ。{{hoge}}のように。