PowerShellで「ユーザーは次回ログオン時にパスワードの変更が必要」を有効化するには

| 2010年6月18日金曜日
サーバー管理をしていてリストにあるユーザー全員の「ユーザーは次回ログオン時にパスワードの変更が必要」を有効化しないといけなくなったので調べてみた。

手順としては、まずユーザー情報を取ってくる。
そのあと、有効化フラグである「1」を指定して反映させる。

PS> $username = ユーザーID
PS> $query "WinNT://./" + $username + ",user"
PS> $user = [ADSI]($query)
PS> $user.PasswordExpired = 1
PS> $user.SetInfo()

自分が実際にやった時には、CSVに書かれたユーザーIDをImport-CSVして一気に処理させたけどね;-)

PowerShellでダミーファイルを作る

|
別にPowerShellでなくても普通にCMDでダミーファイルを作る時も同じだけど、

PS> fsutil.exe file createnew 1MBのダミーファイル 1048576
ファイル C:\Windows\system32\1MBのダミーファイル が作成されました

っとすると、1MBのファイルを作る事が出来る。

それをPowerShellでやると何が嬉しいかと言うと、引数に「1048576」じゃなくて「1MB」と指定しても作れるところだ。

PowerShellでは、

PS> fsutil.exe file createnew 1MBのダミーファイル (1MB)
ファイル C:\Windows\system32\1MBのダミーファイル が作成されました

っとすれば、作ることができる。これで、「100MB」でも「1GB」でも簡単に作れそうだ。

ただ、「1MB」を括弧で囲んで「 (1MB) 」としないと、下のようにヘルプが表示されてしまう。
「1MB」が展開されずに「1MB」と文字列で渡されてしまうからだろう。

PS> fsutil.exe file createnew 1MBのダミーファイル 1MB
使用法 : fsutil file createnew <ファイル名> <長さ>
例 : fsutil file createnew C:\testfile.txt 1000

※ちなみに、Vistaだと管理者権限でPowerShellを起動しないと作れない。

PowerShellでLinuxの「du」コマンド その2

| 2010年6月8日火曜日
 フォルダ容量を取得するくらいなら、PowerShellのコマンドレットだけでできるような気がしてたけど、実際にできたのでメモ。
っというか、前にブログを書いた時点で気付けたと思うんだけどね。まだまだだな俺。

binフォルダ以下の容量を取得ところ、「Sum」が合計
> Get-ChildItem -Path .\bin -Force -Recurse | Measure-Object -Property Length -Sum

Count : 13391
Average :
Sum : 1243746959
Maximum :
Minimum :
Property : Length

これだと、わかりにくいので、MBにする。
> Get-ChildItem -Path .\bin -Force -Recurse | Measure-Object -Property Length -Sum | ForEach-Object { $_.Sum / 1MB }
1186.12953090668

MBでもわかりにくかったのでGBで、
> Get-ChildItem -Path .\bin -Force -Recurse | Measure-Object -Property Length -Sum | ForEach-Object { $_.Sum / 1GB }
1.15832962002605

PowerShellでMACアドレスからメーカーを調べる

| 2010年6月1日火曜日
PowerShellでMACアドレスからメーカー(ベンダー)を調べてみる。

まずは、MACアドレスを取得する。
MACアドレスの取り方はいろいろあるけど、ここでは、「nbtstat」コマンドを利用することにした。
まぁ一行であっさり書きたかっただけだけど。

--- Get-MACAddress.ps1 ---
  1. param([string]$ip)
  2. nbtstat -A $ip | ForEach-Object { if ( $_ -match "MAC") { $_ -replace " ","" -replace "MACアドレス=","" } }

次に、取得したMACアドレスからメーカーを調べる。
メーカーを調べるサイトは、ここを利用させてもらう。

--- Find-MacAddressFromVendorName.ps1 ---
  1. param([string]$macaddress)
  2. [void]([Reflection.Assembly]::LoadWithPartialName("System.Web"))
  3. $macaddress = [Web.HttpUtility]::UrlEncode($macaddress)
  4. $webReq = [Net.HttpWebRequest]::Create("http://www.coffer.com/mac_find/?string=$macaddress")
  5. $webReq.Method = "GET"
  6. $webReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"
  7. $webRes = $webReq.GetResponse()
  8. $sr = New-Object IO.StreamReader($webRes.GetResponseStream(), $webRes.ContentEncoding)
  9. $content = $sr.ReadToEnd()
  10. $sr.Close()
  11. $webRes.Close()
  12. $content = $content.Split("`n")
  13. $result = $content | ForEach-Object {
  14. if ($_ -match "table2" -and $_ -match "td") {
  15. $_ -replace "<.*?>","" -replace "`t","" }
  16. }
  17. $obj = New-Object PSObject
  18. $obj | Add-Member NoteProperty MacAddress $macaddress
  19. $obj | Add-Member NoteProperty Vendor $result[1]
  20. $obj
利用方法は、パスを通したところにスプリクトを保存しておいて、

> Find-MacAddressFromVendorName ( Get-MACAddress 192.168.0.1)

MacAddress            Vendor
----------                ------
XX-XX-XX-XX-XX-XX       XXX

っといった感じ。