SlideShare ist ein Scribd-Unternehmen logo
1 von 50
スクリプトを使用したWindows Server 管理の自動化 マイクロソフト株式会社 エバンジェリスト 安納 順一 & 奥主 洋 &田辺 茂也
本日のスケジュール 13:30 - 14:30基礎編 安納順一  ・スクリプトの実行環境  ・スクリプトの作り方と実行方法   ・スクリプト実行時の注意点  ・リソース 14:40 - 15:45  応用編① 「WMI による Windows Server の監視」      スピーカー 安納 順一 15:55- 16:40   応用編②「WEB サーバーの展開と管理」      スピーカー 奥主 洋 16:50 - 17:50  応用編③「Windows PowerShell による管理と最新情報」      スピーカー 田辺 茂也 18:00- 18:30 ライトニングトーク 18:30 - 19:30 懇親会
第一部 基本編 マイクロソフト株式会社 エバンジェリスト 安納 順一 http://blogs.technet.com/junichia/
基本編では はじめてスクリプトを使う方が       必ず出会う壁について解説します すこしだけ近道ができます でも、一番の近道は試行錯誤です
スクリプトの効能  作業時間の短縮  作業ミスの軽減  繰り返し処理の負荷軽減 GUIでは得られない情報の取得  手順の可視化
どんなことができるのか? Active Directoryに登録されているユーザーから、最近180日以内にパスワードを変更していないユーザーを抽出して「変更しろ」メールを送信 ホストサーバーの負荷を監視し、CPU負荷が95%を越えたらゲストOSを別のホストに移行 Excelシートにかかれた環境設定表を参照しながら、100台のサーバーを自動的に構築
代表的なスクリプト言語 バッチファイル(拡張子 .bat) MS-DOS時代から使われてきたコマンドシェル上のスクリプト。脈々と現代に引き継がれており、利用者が多い。豊富なコマンド群によって支えられており、案外使い出がある。複数のスクリプトを取りまとめる役割としても便利。 Windows Script VBScript(拡張子 .vbs) Visual Basic のスクリプト版。「Visual」とあるが、Visual ではない。わかりやすい文法と、緩い規則によって根強いファンが多い。亜種として VBA もあるが微妙に文法は異なる。 Jscript(拡張子 .js) JavaScript のMS実装版として、VBScript とともに登場。JavaScript をMicrosoft の独自仕様によって拡張することで、汎用性を増している。 PowerShell(拡張子 .ps1) いわずと知れた高機能スクリプト言語。.NET Framework が使えると言うメリットから、利用者は爆発的に増殖中。多くの製品がPowerShell用のコマンドレットを提供しはじめており、Windows ScriptHost の存在を脅かしつつある。
スクリプトの実行環境 PowerShell  スクリプト bat VBScript JScript PowerShell  エンジン COM exe COM .NET Framework Script Engine Class Library Windows Script Host cmd/command Cscript.exe Wscript.exe CLR(共通言語ランタイム) Windows
コマンドシェルの進化と機能の包含 Win9x/Me DOS/Win31 Win7/ 2008R2 XP/2003 Vista/2008 NT 2000 低機能 PowerShell.exe cmd.exe command.com Windows Script(Scripting) Host PowerShell上ではbat/vbs/js も実行可能 高機能
さぁ つかってみましょう
スクリプトを使う前にやっておくこと  共通 コマンドシェルの環境設定  簡易編集を有効に  フォントを見やすく  横幅の設定  バッファの設定  エクスプローラーの環境設定 「拡張子を表示しない」を無効に  Windows Script Host の場合は…  ホストプログラムを Cscript.exe にする コマンドプロンプトから以下のように入力  Cscript.exe //h:cscript   ※もし忘れたまま実行してしまったらタスクマネージャで    Wscript.exeを停止  PowerShell の場合は  署名無しのスクリプトを実行できるようにする(管理者モードで実行) Set-ExecutionPolicyRemoteSigned  必要に応じて自分用初期設定ファイルの作成(notepad $profile) cmd.exe と powershell.exeは独立している
スクリプトの作り方 メモ帳(notepad)を開く※スクリプトはテキストファイル スクリプトを書いて「名前をつけて保存」 コマンドプロンプトまたはPowerShellコンソールを開いてファイル名を入力、またはエクスプローラからダブルクリック CAUTION! 保存後は拡張子とアイコンを確認しましょう
覚えておくと便利な機能 メモ帳 編  指定した行番号に飛ぶ Ctrl + G  ステータスバーを表示すると行と列が参照できる  ※いずれも「右端で折り返し」を無効にしておくこと コマンドプロンプト編  タブでパスの続きを補完 (例)C:rog [Tab]      ↓    [Tab]キー      ↓    C:rogram Files  ※PowerShellのコンソールではコマンドレット名も補完 自動補完された部分
スクリプトの作成環境とデバッグ エディタ デバッガ バッチファイル フリー/シェアウェア/商用のエディタ なし?? メモ帳&目視 VBScript フリー/シェアウェア/商用のエディタ エディタ組み込み VbsEdit PowerShell フリー/シェアウェア/商用のエディタ エディタ組み込み 2.0からは標準装備
バッチファイルをつかってみよう  コマンドを知らないと始まらない  拡張子 BAT でテキストファイルを保存   コマンドプロンプトに書けるコマンドならば、何でもOK  基本は1行に1コマンド  処理を行いたい順番に書く Sample : ドメインにユーザーを作成して各種設定を行う echo off echo 処理を開始します set user=testuser01 net user %user% password0$ /add /domain net user %user% /fullname:”テスト ユーザー 01” /domain net user %user% /homedir:serveromeuser% /domain net user %user% /profilepath:serverrofilesuser% /domain net user %user% /expires:2009/10/1 /domain net user %user%/domain echo ユーザー %user% を作成しました sample01.bat 拡張子 bat で保存してコマンドプロンプトから実行
WSHとPowerShellを使う前に 理解しておかなければならない概念 オブジェクトモデル/ネームスペース  オブジェクトとは 複数の情報を取り扱うための情報集合体  オブジェクトにさまざまな指令を出すことで情報を引き出す  情報がたんまりある場合、1種類のオブジェクトでは不便なので、機能ごとに分け、わかりやすい階層構造にしたものがオブジェクトモデル(PowerShellではネームスペースと呼ぶ) メソッド  オブジェクトに処理を行わせる場合に使用する プロパティ  オブジェクトの属性を取得する際に使用する コレクション  複数の値が含まれている変数のこと  戻り値がコレクションタイプであることが多い
オブジェクトモデルの例 あるフォルダのファイル一覧を取得しようとする場合 ファイルシステムオブジェクト 基点となるオブジェクト メソッドで配下のオブジェクトを取得 GetFolder(フォルダ名) フォルダオブジェクト メソッドの戻り値 プロパティで値を取得 Filesプロパティ ファイルオブジェクトのコレクション プロパティの戻り値 どのオブジェクトにどんなメソッド、プロパティが用意されているかは、MSDNに掲載されているドキュメントに書かれている
WSHをつかってみよう(今回はVBScript)  リファレンスは常に片手に  文法の基本はBASIC  オブジェクトの使い方になれること Sample : 指定したフォルダのファイル一覧 sample02.vbs SetobjFS 	= CreateObject("Scripting.FileSystemObject") Set objFolder 	= objFS.GetFolder("C:mp") Set colFiles	= objFolder.Files For Each file in colFiles Wscript.Echofile.Name Next 最上位のオブジェクトはProgIDと呼ばれる文字列を指定してインスタンスを取得
PowerShellをつかってみよう~PowerShellに関する書式情報の取得方法 使い方に関する情報を得る方法をおさえておこう  使えるコマンドレット一覧取得 Get-Command インストールされているアプリによってコマンドレットは増減する  コマンドレットの詳細な書式と例を表示 Get-Help<コマンドレット>-detailed  コマンドレットのメソッドとプロパティ等を表示 <コマンドレット>|get-member <コマンドレット>|get-member| sort-object Name | format-list ※COMのメンバーも取得できる New-Object -comscripting.filesystemobject | Get-Member
PowerShellを使ってみよう Sample : 指定したフォルダのファイル一覧 sample03.ps1 Get-ChildItem c:mp | Where-Object {!( $_.Attributes –band 16 )} | Select-ObjectName,Attributes 処理結果はパイプを通して”オブジェクトとして”コマンドに渡される $_.Attributes  and010000 = True ※-band はビット演算子 and  (参考)継続行 について あきらかに継続することがわかる場合には、行の継続は自動的に判断してくれる PowerShell コンソールから入力した場合も同様 PS C:amp;gt; .ample03.ps1 PowerShell コンソールから C:amp;gt; powershell.ample03.ps1 コマンドプロンプトから
おさえておきたい基本機能  コメントのつけ方   引数を受け取る  変数の取り扱い  入出力(コンソール/ファイル)  繰り返し(ループ)処理
コメントのつけ方 スクリプトを引き継ぎやすくするため、処理の内容等についてコメントをつけましょう。書式についても書いておくとよいです。 バッチ REM処理を開始します copy c:mp.txt z:br />REM処理が終了しました VBScript ‘処理を開始します Set objFSO = CreateObject("Scripting.FileSystemObject") r = objFso.CopyFile ("c:tmp*.txt", "c:TEMP") ‘処理を終了しました PowerShell #処理を開始します copy-item C:mp.txt -destination C:br /># 処理を終了しました
引数を受け取る方法 5つの引数 C:amp;gt; <スクリプト名> My name is “Junichi Anno”. バッチ %1 ~%9 までの変数で受け取る Echo %1 / %2 / %3 / %4  Shift Echo %1 / %2 / %3 / %4 Set FullName=%3 Echo %FullName:"=% My / name / is / "Junichi Anno“ name / is / "Junichi Anno" / . Junichi Anno VBScript My name is Junichi Anno . Set Args = Wscript.Arguments If Args.Count <> 0 Then    For Each n in Args Wscript.Echo n    Next End If PowerShell My name is Junichi Anno . Junichi Anno foreach ( $a in $args)  {  Write-HostOutput $a  } Write-HostOutput $args[3]
名前付き引数 引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる WSHとPowerShell でスイッチの識別文字が異なることに注意 VBScript C:amp;gt; script.vbs /userid:anno/password:hogehoge If WScript.Arguments.Named.Exists("userid") then strUserID = WScript.Arguments.Named.Item("userid") End If If WScript.Arguments.Named.Exists("password") then strPassword = WScript.Arguments.Named.Item("password") End If PowerShell C:amp;gt; script.ps1 -userid anno  -password hogehoge param([string] $UserID = “nouserid", [string] $Password = "nopassword") Write-HostOutput $userid Write-HostOutput $Password
変数の扱いと値の代入 バッチ Set LastName=Anno Set FirstName=Junichi Set FullName=“%FirstName% %LastName%” Set FullName=%FullName:"=% Echo %FullName% Echo %FullName:n=x% Echo %FullName:~8% Echo %FullName:~8,1% Echo %FullName:~-4,3% If /I %FullName:~-1,1%==o Echo OK Junichi Anno Juxichi Axxo Anno A Ann OK WSH FirstName = "Junichi" LastName = "Anno" FullName = FirstName & " " & LastName Wscript.Echo Split(FullName," ")(0) Junichi PowerShell $FirstName = "Junichi" $LastName = "Anno" $FullName = $FirstName + " " + $LastName Write-HostOutput $FullName $arrFullName = $FullName.Split(" ") Write-HostOutput $arrFullname[0] Junichi Anno Junichi
入出力方法 これを抑えておけば、ひとまずたいていのことはできます バッチ 画面への出力:Echo “Hello World” 画面からの入力:「choice」コマンド または 「set /p」コマンド ファイルへの出力:dir > list.txt  または dir >> list.txt ファイルから入力: for /f "delims=" %i in ('type c:mpist.txt') do @echo %i WSH(VBScript) 画面への出力:Wscript.Echo“Hello World” 画面からの入力:Stdin.ReadLine ファイルへの出力:fso.OpenTextFile(“c:ist.txt”, 2 or 8)  ファイルから入力:fso.OpenTextFile(“c:ist.txt”, 1) PowerShell 画面で確認 画面への出力:Write-Output“Hello” 画面からの入力:$InputData = Read-Host  ファイルへの出力:Out-File -filepath C:mpist.txt -inputobject $Record ファイルから入力: $file = Get-Content -Path c:mpist.txt
入出力例~バッチファイル sample04.bat @Echo Off REM 年号変換 :InputYear Echo 西暦を入力してください(1868 - 2009) Set /p Year= CHOICE /C YN /T 60 /D y /M “%Year% 年で間違いないですか?“ IF %ERRORLEVEL%==2 	GOTO :InputYear IF %Year% LSS 1868 ( 	Echo 西暦は 1868 - 2009 の範囲で指定してください GOTO :InputYear 	) IF %Year% GTR 2009 ( 	Echo 年齢は 1868 - 2009 の範囲で指定してください GOTO :InputYear 	) For /F "Tokens=1,2 Delims= " %%i in ('Type nengo.txt') Do Call :ChkNengo %Year% %%i %%j GOTO :END :ChkNengo 	IF %1==%3 ( 		Echo 西暦 %1年は %2 年です 		GOTO :END 		)  GOTO :EOF :END nengo.txt 明治1 1868 明治2 1869  明治3 1870  明治4 1871  ・ ・ 平成18 2006  平成19 2007  平成20 2008  平成21 2009 ファイルを1行読むたびに呼ばれる
入出力例 ~ WSH(VBScript) strYear = InputYear() strNengo = ChkNengo(strYear) Wscript.Echo "西暦" & strYear & "年は " & strNengo & "年です“ Function InputYear()    Set StdIn = WScript.StdIn    Set StdOut = WScript.StdOut    Do  WScript.Echo "西暦を入力してください(1868 - 2009)" tmpYear = StdIn.ReadLine If IsNumeric(tmpYear) Then StdOut.WriteLinetmpYear & " でよいですか?(Y/N)“   Select Case UCase(StdIn.ReadLine)        Case "Y"   If tmpYear >= 1868 and tmpYear <= 2009 Then 	       Exit Do 	    End If End Select End If    Loop	 InputYear = tmpYear End Function sample05.vbs Function ChkNengo(strYear)    Set objFSO = CreateObject("Scripting.FileSystemObject")    Set objFS  = objFSO.OpenTextFile("nengo.txt", 1)    Do While objFS.AtEndOfStream <> True strRec = objFS.ReadLine arrRec = Split(strRec," ")       If arrRec(1) = strYear Then ChkNengo = arrRec(0) 	Exit Do       End If    Loop objFS.Close End Function
バッチファイルを極めるには 画面でヘルプを 見てみましょう IF 文を使いこなす Else だって使えます  環境変数を使いこなす  規定の環境変数には使えるものがいっぱい  遅延展開を意識しよう Set を使いこなす  文字列処理など多方面で活躍  計算も可能  ラベル と Call を使いこなす  処理を関数化することで再利用しやすい構造に For を使いこなす  繰り返し処理だけでなく、処理結果の受け取りにも コマンドをたくさん知っていると吉
VBScript を極めるには DictionaryObject を使いこなす  データ比較等の高負荷/高速処理に最適 アレイ値を使いこなす  戻り値がアレイタイプであることなんてしょっちゅう COM を使いこなす ADO(ActiveX Data Object)  データベースアクセスだけでなくActive Directoryにも  文字コード変換等の裏技にも流用 ADSI(Active Directory Service Interfaces) Active Directoryを操作する WMI(Windows Management Instrumentation)  困ったときのWMI頼み,「監視」が得意 LogPerser  ログの集計とグラフ化 WORD/PowerPoint/Excel/Access もCOM経由で操作可能
VBScriptサンプル① ~ADOでADを検索 sample06.vbs ここ30日間 パスワード変更を実施していないユーザー一覧を取得する szDomain = "DC=annou,DC=com"intDaysBefore = 30  szDateTime = DateAdd(“d”, 0-intDaysBefore, Now)lngDateTime = CDateToInt8(szDateTime) Set objConnection = CreateObject(“ADODB.Connection”)objConnection.Open “Provider=ADsDSOObject;”Set objCommand = CreateObject(“ADODB.Command”)objCommand.ActiveConnection = objConnectionobjCommand.Properties(“Page Size”) = 20000objCommand.CommandText = “<LDAP://” & szDomain & “>;” & _        “(&(objectCategory=person)(objectClass=user)” & _  “(pwdLastSet<=” & lngDateTime & “));” & _  “cn,distinguishedName,pwdLastSet;“& "subtree"Set objRecordSet = objCommand.Execute Do Until objRecordset.EOF szDN   = objRecordset.Fields(“distinguishedName”)    szUser = objRecordset.Fields(“cn”)    lngpwdLastSet = objRecordset.Fields(“pwdLastSet”)    dtpwsLastSet = CInt8ToDate(lngpwdLastSet) WScript.EchoszUser & “,” & dtpwsLastSet objRecordset.MoveNextLoop いまから30日前の日時を計算 30日前の日付をINT8形式に変換 Active Directoryを検索 pwdLastSet は最後にパスワードが変更された日時に関する情報が格納されている。ただし、1601年1月1日0:00(標準時)を基準とし、単位は100ns。INT8形式。
objConnection.CloseSet objCommand = Nothing  Function CDateToInt8(szDateTime) dtDateValue = CDate(szDateTime) Set objShell = CreateObject(“Wscript.Shell”)    lngBias = TimeZoneBIOS() dtAdjusted = DateAdd(“n”, lngBias, dtDateValue) lngSeconds = DateDiff(“s”, #1/1/1601#, dtAdjusted) CDateToInt8 = CStr(lngSeconds) & "0000000"End Function  Function TimeZoneBIOSSet objShell = CreateObject(“Wscript.Shell”) szKey = “HKLMystemurrentControlSetontrol & _   “TimeZoneInformationctiveTimeBias” lngBiasKey = objShell.RegRead(szKey) If UCase(TypeName(lngBiasKey)) = “LONG” Then   lngTZBias = lngBiasKey ElseIfUCase(TypeName(lngBiasKey)) = “VARIANT()” Then    lngTZBias = 0    For k = 0 To UBound(lngBiasKey)     lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)  Next End If TimeZoneBIOS = lngTZBiasEnd Function  標準時とのオフセット情報を取得 オフセットの変数タイプを取得
Function CInt8ToDate(lngDateTime)  On Error Resume Next  lngAdjust = TimeZoneBIOS  lngHigh = lngDateTime.HighPart  lngLow = lngDateTime.LowPart  If lngLow < 0 Then lngHigh = lngHigh + 1  If (lngHigh = 0) And (lngLow = 0) Then lngAdjust = 0  lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) + lngLow) / 600000000 - lngAdjust) / 1440  CInt8ToDate = CDate(lngDate)  If Err.Number <> 0 Then    On Error GoTo 0    CInt8ToDate = #1/1/1601#  End IfEnd Function 基準年月日+pwdLastSet-9時間 パスワードが変更された日時を算出
Vbscriptサンプル② ~ ADO でコード変換 sample07.vbs strFileNameに指定されたファイルを、ANSIからUTF-8に変換する r = ANSI2UTF8(strFileName) Function ANSI2UTF8(strFileName) adTypeBinary = 1: adTypeText = 2  : adCR= 13  : adCRLF= -1 adLF = 10 :adReadLine = -2 : adWriteLine= 1 : adSaveCreateOverWrite= 2 	Set stmANSI = CreateObject("ADODB.Stream") 	Set stmUTF8 = CreateObject("ADODB.Stream") 	Set stmNoBOM = CreateObject("ADODB.Stream") stmANSI.Open stmANSI.Type = adTypeBinary stmANSI.LoadFromFilestrFileName stmANSI.Type = adTypeText stmANSI.LineSeparator = adCRLF stmANSI.Charset = "iso-2022-jp" 	stmUTF8.Open 	stmUTF8.Type = adTypeText 	stmUTF8.LineSeparator = adCRLF 	stmUTF8.CharSet = "UTF-8"         Do Until stmANSI.EOS strData = stmANSI.ReadText(adReadLine)            	stmUTF8.WriteText strData , adWriteLine         Loop コロンです! stmANSI.Close         stmUTF8.Position = 0 : stmUTF8.Type = adTypeBinary stmUTF8.Position = 3 stmNoBOM.Open stmNoBOM.Type = adTypeBinary 	stmUTF8.CopyTo stmNoBOM         stmUTF8.Close stmNoBOM.SaveToFilestrRec , adSaveCreateOverWrite stmNoBOM.Close End Function
PowerShell を極めるには 応用編~Powershellにて
スクリプト作成を補助するツール 以下はダウンロードセンターからダウンロード可能 VBScript ADSI Scriptomatic WMI Scriptomatic WMI Code Creator お勧め PowerShell Scriptomatic for PowerShell その他(共通) お勧め WMI AdministrativeTools OLE/COM View WMIについては応用編で詳しく
OLE/COM View(OLEVEW.exe) 使用するには Windows SDK をダウンロードセンターからダウンロードしてインストール  ただしWin32 Development ToolsだけでOK  インストール後、以下を実行   regsvr32 "c:rogram Filesicrosoft SDKsindows7.0inViewers.Dll" 何ができる? 使用可能なCOMコンポーネントの インターフェースを調べることが できる 使い方 ① タイプライブラリのファイル名を参照 ② レジストリエディタでファイル名を検索する ③ ProgIDキーでProgIDを取得する ④ プロパティ/メソッドはタイプライブラリの詳細情報を参照 ⑤ Setobj = CreateObject(“ProgID”)
安全なスクリプト Script Encoder ダウンロードセンターからダウンロード可能 スクリプトの「不可視化」が可能 対応ファイルasp,asa,cdx,html,htm,js,vbs,wsh,sct 拡張子が変更されることに注意 js 	-> jse vbs 	-> vbe 署名 Scripting.Signerオブジェクトを使用Set Signer = CreateObject("Scripting.Signer")
Script Encoderによるエンコード例 危険!! strADsPath = "LDAP://CN=Administrator,CN=Users,DC=annou,DC=com" AdminUser  = "administrator" AdminPass  = "password" ADS_SECURE_AUTHENTICATION  = 1 Set objProvider = GetObject("LDAP:") Set objUser = objProvider.OpenDSObject(strADsPath, AdminUser, _			AdminPass, ADS_SECURE_AUTHENTICATION) screnc adtest.vbs adtest.vbe #@~^VwEAAA==dDD)G/hlY4P{~Jdf)n=z&/g'jknDk~f;xCx	W!~9Zx^K:E@#@&)NskUik+D~~{PEl9hbxrkYMlYKDr@#@&zNhk	nCdkPP{~J^lD0hqV9^r@#@&b9j|?3Z`]2|biP_21P(;bPq}H,Px,F@#@&?Y,G4Nn.W7k[nMP',!+Dr4Nn^YvJdf)nlE*@#@&?OPK4%ik+D~x,W8Lh.K9+MRra+	9?}4%+1YcdDDbGdnmYtB~m@#@&did~P~~,P~P,~P,P~~zN:rU`/nDB~|@#@&idiPd,P,~P,P)NskUKm//B~{@#@&di77P,P,P~P)9U{j2;iIA{)i:C2HP&Z)K&6g#@#@&flsAAA==^#~@
まとめ  どの言語を使うか迷ったら PowerShell を  適材適所を意識する必要はありません  メンテナンス性を損なわないように工夫しましょう  機能ごとに関数化を 利用者にやさしいスクリプト作りを  名前付き引数 /? -? の実装(複雑にしすぎない)  バッチファイルをうまく使いましょう
さいごに スクリプト習得に必要なのは 「できないはずがない」という信念 サンプルを探し出す執念 回避策に逃げる柔軟性 わかりやすく努力が報われるのがスクリプトの世界です
リソース Windows Script に関するリファレンス Windows スクリプトテクノロジ http://msdn.microsoft.com/ja-jp/library/cc392483.aspx IDGWindows Server World 過去の特集記事のアーカイブ 「システム管理スクリプトの教室 」 http://www.windows-world.jp/special/-/99809.html ADSI関連スクリプトについて解説 各種サンプル(Windows Script、PowerShell) スクリプトセンター http://www.microsoft.com/japan/technet/scriptcenter/default.mspx 基本的なスクリプトが満載 本日使用したスクリプト http://blogs.technet.com/junichia/pages/3221367.aspx
付録
WSHのオブジェクト構造 - Wscript
WSHのオブジェクトモデル-WshArguments
WSHのオブジェクトモデル-WshShell
WSHのオブジェクトモデル - WshNetwork

Weitere ähnliche Inhalte

Was ist angesagt?

野良ビルドから見たGentoo
野良ビルドから見たGentoo野良ビルドから見たGentoo
野良ビルドから見たGentoo
Naohiro Aota
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
博文 斉藤
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
kjwtnb
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
Perl logging
Perl loggingPerl logging
Perl logging
keroyonn
 

Was ist angesagt? (13)

What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03
 
Casperjsのインストール
CasperjsのインストールCasperjsのインストール
Casperjsのインストール
 
Wake and Shutdown on LAN
Wake and Shutdown on LANWake and Shutdown on LAN
Wake and Shutdown on LAN
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
Lep 2013-07-23
Lep 2013-07-23Lep 2013-07-23
Lep 2013-07-23
 
野良ビルドから見たGentoo
野良ビルドから見たGentoo野良ビルドから見たGentoo
野良ビルドから見たGentoo
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Perl logging
Perl loggingPerl logging
Perl logging
 
RとWeb API
RとWeb APIRとWeb API
RとWeb API
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5
 

Andere mochten auch

Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514
junichi anno
 
AWS Simple Monthly Calculator 操作説明書
AWS Simple Monthly Calculator 操作説明書AWS Simple Monthly Calculator 操作説明書
AWS Simple Monthly Calculator 操作説明書
Amazon Web Services Japan
 
WebサービスStartUP向け AWSスケーラブルな構成例
WebサービスStartUP向け AWSスケーラブルな構成例WebサービスStartUP向け AWSスケーラブルな構成例
WebサービスStartUP向け AWSスケーラブルな構成例
Amazon Web Services Japan
 

Andere mochten auch (7)

Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIWindows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMI
 
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514
 
AWS Simple Monthly Calculator 操作説明書
AWS Simple Monthly Calculator 操作説明書AWS Simple Monthly Calculator 操作説明書
AWS Simple Monthly Calculator 操作説明書
 
WebサービスStartUP向け AWSスケーラブルな構成例
WebサービスStartUP向け AWSスケーラブルな構成例WebサービスStartUP向け AWSスケーラブルな構成例
WebサービスStartUP向け AWSスケーラブルな構成例
 
Guided Reading: Making the Most of It
Guided Reading: Making the Most of ItGuided Reading: Making the Most of It
Guided Reading: Making the Most of It
 

Ähnlich wie Windows スクリプトセミナー 基本編

2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
Akihiro Kuwano
 
おれが考えた見やすい通知
おれが考えた見やすい通知おれが考えた見やすい通知
おれが考えた見やすい通知
Yoshiyuki MIKAMI
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
kumachang_LL
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
Jiro Nishiguchi
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
ichikaway
 

Ähnlich wie Windows スクリプトセミナー 基本編 (20)

2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 
Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活Mon, Muninによる楽々監視生活
Mon, Muninによる楽々監視生活
 
Ruby – The Scripting Language
Ruby – The Scripting LanguageRuby – The Scripting Language
Ruby – The Scripting Language
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
おれが考えた見やすい通知
おれが考えた見やすい通知おれが考えた見やすい通知
おれが考えた見やすい通知
 
Future with Firefox OS
Future with Firefox OSFuture with Firefox OS
Future with Firefox OS
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
はせがわようすけ
はせがわようすけはせがわようすけ
はせがわようすけ
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
 
20090704rubyist九州
20090704rubyist九州20090704rubyist九州
20090704rubyist九州
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 
Ilerpg Study 005
Ilerpg Study 005Ilerpg Study 005
Ilerpg Study 005
 
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
 

Mehr von junichi anno

File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaS
junichi anno
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計
junichi anno
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割
junichi anno
 

Mehr von junichi anno (20)

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Ac...
 
Microsoft Azure のセキュリティ
Microsoft Azure のセキュリティMicrosoft Azure のセキュリティ
Microsoft Azure のセキュリティ
 
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure ADAzure AD によるリソースの保護 how to protect and govern resources under the Azure AD
Azure AD によるリソースの保護 how to protect and govern resources under the Azure AD
 
Azure AD による Web API の 保護
Azure AD による Web API の 保護 Azure AD による Web API の 保護
Azure AD による Web API の 保護
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
 
Azure Key Vault
Azure Key VaultAzure Key Vault
Azure Key Vault
 
個人情報を守るための アプリケーション設計(概要)
個人情報を守るためのアプリケーション設計(概要)個人情報を守るためのアプリケーション設計(概要)
個人情報を守るための アプリケーション設計(概要)
 
IoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on AzureIoT のセキュリティアーキテクチャと実装モデル on Azure
IoT のセキュリティアーキテクチャと実装モデル on Azure
 
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
DevSecOps: セキュリティ問題に迅速に対応するためのパイプライン設計
 
Azureの管理権限について
Azureの管理権限について Azureの管理権限について
Azureの管理権限について
 
Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版Azure Active Directory 1枚資料 20151125版
Azure Active Directory 1枚資料 20151125版
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門
 
File Server on Azure IaaS
File Server on Azure IaaSFile Server on Azure IaaS
File Server on Azure IaaS
 
Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版Windows File Service 総復習-Windows Server 2012 R2編 第1版
Windows File Service 総復習-Windows Server 2012 R2編 第1版
 
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
Active Directory のクラウド武装化計画 V2~"AD on Azure IaaS" or "Windows Azure Active Di...
 
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
勉強会キット Windows Server 2012 R2 評価版 BYOD 編 v2 20131020 版
 
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するHyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
 
Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計Vdi を より使いやすいインフラにするためのセキュリティ設計
Vdi を より使いやすいインフラにするためのセキュリティ設計
 
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
最新Active DirectoryによるIDMaaSとハイブリッド認証基盤の実現
 
SaaS としての IDM の役割
SaaS としての IDM の役割SaaS としての IDM の役割
SaaS としての IDM の役割
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Windows スクリプトセミナー 基本編

  • 1. スクリプトを使用したWindows Server 管理の自動化 マイクロソフト株式会社 エバンジェリスト 安納 順一 & 奥主 洋 &田辺 茂也
  • 2. 本日のスケジュール 13:30 - 14:30基礎編 安納順一  ・スクリプトの実行環境  ・スクリプトの作り方と実行方法  ・スクリプト実行時の注意点  ・リソース 14:40 - 15:45  応用編① 「WMI による Windows Server の監視」      スピーカー 安納 順一 15:55- 16:40  応用編②「WEB サーバーの展開と管理」      スピーカー 奥主 洋 16:50 - 17:50  応用編③「Windows PowerShell による管理と最新情報」      スピーカー 田辺 茂也 18:00- 18:30 ライトニングトーク 18:30 - 19:30 懇親会
  • 4. 基本編では はじめてスクリプトを使う方が       必ず出会う壁について解説します すこしだけ近道ができます でも、一番の近道は試行錯誤です
  • 5. スクリプトの効能 作業時間の短縮 作業ミスの軽減 繰り返し処理の負荷軽減 GUIでは得られない情報の取得 手順の可視化
  • 6. どんなことができるのか? Active Directoryに登録されているユーザーから、最近180日以内にパスワードを変更していないユーザーを抽出して「変更しろ」メールを送信 ホストサーバーの負荷を監視し、CPU負荷が95%を越えたらゲストOSを別のホストに移行 Excelシートにかかれた環境設定表を参照しながら、100台のサーバーを自動的に構築
  • 7. 代表的なスクリプト言語 バッチファイル(拡張子 .bat) MS-DOS時代から使われてきたコマンドシェル上のスクリプト。脈々と現代に引き継がれており、利用者が多い。豊富なコマンド群によって支えられており、案外使い出がある。複数のスクリプトを取りまとめる役割としても便利。 Windows Script VBScript(拡張子 .vbs) Visual Basic のスクリプト版。「Visual」とあるが、Visual ではない。わかりやすい文法と、緩い規則によって根強いファンが多い。亜種として VBA もあるが微妙に文法は異なる。 Jscript(拡張子 .js) JavaScript のMS実装版として、VBScript とともに登場。JavaScript をMicrosoft の独自仕様によって拡張することで、汎用性を増している。 PowerShell(拡張子 .ps1) いわずと知れた高機能スクリプト言語。.NET Framework が使えると言うメリットから、利用者は爆発的に増殖中。多くの製品がPowerShell用のコマンドレットを提供しはじめており、Windows ScriptHost の存在を脅かしつつある。
  • 8. スクリプトの実行環境 PowerShell スクリプト bat VBScript JScript PowerShell エンジン COM exe COM .NET Framework Script Engine Class Library Windows Script Host cmd/command Cscript.exe Wscript.exe CLR(共通言語ランタイム) Windows
  • 9. コマンドシェルの進化と機能の包含 Win9x/Me DOS/Win31 Win7/ 2008R2 XP/2003 Vista/2008 NT 2000 低機能 PowerShell.exe cmd.exe command.com Windows Script(Scripting) Host PowerShell上ではbat/vbs/js も実行可能 高機能
  • 11. スクリプトを使う前にやっておくこと 共通 コマンドシェルの環境設定 簡易編集を有効に フォントを見やすく 横幅の設定 バッファの設定 エクスプローラーの環境設定 「拡張子を表示しない」を無効に Windows Script Host の場合は… ホストプログラムを Cscript.exe にする コマンドプロンプトから以下のように入力  Cscript.exe //h:cscript   ※もし忘れたまま実行してしまったらタスクマネージャで    Wscript.exeを停止 PowerShell の場合は 署名無しのスクリプトを実行できるようにする(管理者モードで実行) Set-ExecutionPolicyRemoteSigned 必要に応じて自分用初期設定ファイルの作成(notepad $profile) cmd.exe と powershell.exeは独立している
  • 12. スクリプトの作り方 メモ帳(notepad)を開く※スクリプトはテキストファイル スクリプトを書いて「名前をつけて保存」 コマンドプロンプトまたはPowerShellコンソールを開いてファイル名を入力、またはエクスプローラからダブルクリック CAUTION! 保存後は拡張子とアイコンを確認しましょう
  • 13. 覚えておくと便利な機能 メモ帳 編 指定した行番号に飛ぶ Ctrl + G ステータスバーを表示すると行と列が参照できる  ※いずれも「右端で折り返し」を無効にしておくこと コマンドプロンプト編 タブでパスの続きを補完 (例)C:rog [Tab]     ↓    [Tab]キー     ↓    C:rogram Files  ※PowerShellのコンソールではコマンドレット名も補完 自動補完された部分
  • 14. スクリプトの作成環境とデバッグ エディタ デバッガ バッチファイル フリー/シェアウェア/商用のエディタ なし?? メモ帳&目視 VBScript フリー/シェアウェア/商用のエディタ エディタ組み込み VbsEdit PowerShell フリー/シェアウェア/商用のエディタ エディタ組み込み 2.0からは標準装備
  • 15. バッチファイルをつかってみよう コマンドを知らないと始まらない 拡張子 BAT でテキストファイルを保存  コマンドプロンプトに書けるコマンドならば、何でもOK 基本は1行に1コマンド 処理を行いたい順番に書く Sample : ドメインにユーザーを作成して各種設定を行う echo off echo 処理を開始します set user=testuser01 net user %user% password0$ /add /domain net user %user% /fullname:”テスト ユーザー 01” /domain net user %user% /homedir:serveromeuser% /domain net user %user% /profilepath:serverrofilesuser% /domain net user %user% /expires:2009/10/1 /domain net user %user%/domain echo ユーザー %user% を作成しました sample01.bat 拡張子 bat で保存してコマンドプロンプトから実行
  • 16. WSHとPowerShellを使う前に 理解しておかなければならない概念 オブジェクトモデル/ネームスペース オブジェクトとは 複数の情報を取り扱うための情報集合体 オブジェクトにさまざまな指令を出すことで情報を引き出す 情報がたんまりある場合、1種類のオブジェクトでは不便なので、機能ごとに分け、わかりやすい階層構造にしたものがオブジェクトモデル(PowerShellではネームスペースと呼ぶ) メソッド オブジェクトに処理を行わせる場合に使用する プロパティ オブジェクトの属性を取得する際に使用する コレクション 複数の値が含まれている変数のこと 戻り値がコレクションタイプであることが多い
  • 17. オブジェクトモデルの例 あるフォルダのファイル一覧を取得しようとする場合 ファイルシステムオブジェクト 基点となるオブジェクト メソッドで配下のオブジェクトを取得 GetFolder(フォルダ名) フォルダオブジェクト メソッドの戻り値 プロパティで値を取得 Filesプロパティ ファイルオブジェクトのコレクション プロパティの戻り値 どのオブジェクトにどんなメソッド、プロパティが用意されているかは、MSDNに掲載されているドキュメントに書かれている
  • 18. WSHをつかってみよう(今回はVBScript) リファレンスは常に片手に 文法の基本はBASIC オブジェクトの使い方になれること Sample : 指定したフォルダのファイル一覧 sample02.vbs SetobjFS = CreateObject("Scripting.FileSystemObject") Set objFolder = objFS.GetFolder("C:mp") Set colFiles = objFolder.Files For Each file in colFiles Wscript.Echofile.Name Next 最上位のオブジェクトはProgIDと呼ばれる文字列を指定してインスタンスを取得
  • 19. PowerShellをつかってみよう~PowerShellに関する書式情報の取得方法 使い方に関する情報を得る方法をおさえておこう 使えるコマンドレット一覧取得 Get-Command インストールされているアプリによってコマンドレットは増減する コマンドレットの詳細な書式と例を表示 Get-Help<コマンドレット>-detailed コマンドレットのメソッドとプロパティ等を表示 <コマンドレット>|get-member <コマンドレット>|get-member| sort-object Name | format-list ※COMのメンバーも取得できる New-Object -comscripting.filesystemobject | Get-Member
  • 20. PowerShellを使ってみよう Sample : 指定したフォルダのファイル一覧 sample03.ps1 Get-ChildItem c:mp | Where-Object {!( $_.Attributes –band 16 )} | Select-ObjectName,Attributes 処理結果はパイプを通して”オブジェクトとして”コマンドに渡される $_.Attributes and010000 = True ※-band はビット演算子 and (参考)継続行 について あきらかに継続することがわかる場合には、行の継続は自動的に判断してくれる PowerShell コンソールから入力した場合も同様 PS C:amp;gt; .ample03.ps1 PowerShell コンソールから C:amp;gt; powershell.ample03.ps1 コマンドプロンプトから
  • 21. おさえておきたい基本機能 コメントのつけ方 引数を受け取る 変数の取り扱い 入出力(コンソール/ファイル) 繰り返し(ループ)処理
  • 22. コメントのつけ方 スクリプトを引き継ぎやすくするため、処理の内容等についてコメントをつけましょう。書式についても書いておくとよいです。 バッチ REM処理を開始します copy c:mp.txt z:br />REM処理が終了しました VBScript ‘処理を開始します Set objFSO = CreateObject("Scripting.FileSystemObject") r = objFso.CopyFile ("c:tmp*.txt", "c:TEMP") ‘処理を終了しました PowerShell #処理を開始します copy-item C:mp.txt -destination C:br /># 処理を終了しました
  • 23. 引数を受け取る方法 5つの引数 C:amp;gt; <スクリプト名> My name is “Junichi Anno”. バッチ %1 ~%9 までの変数で受け取る Echo %1 / %2 / %3 / %4 Shift Echo %1 / %2 / %3 / %4 Set FullName=%3 Echo %FullName:"=% My / name / is / "Junichi Anno“ name / is / "Junichi Anno" / . Junichi Anno VBScript My name is Junichi Anno . Set Args = Wscript.Arguments If Args.Count <> 0 Then For Each n in Args Wscript.Echo n Next End If PowerShell My name is Junichi Anno . Junichi Anno foreach ( $a in $args) { Write-HostOutput $a } Write-HostOutput $args[3]
  • 24. 名前付き引数 引数を所定の名前の変数に格納することで、文法チェック等が行いやすくなる WSHとPowerShell でスイッチの識別文字が異なることに注意 VBScript C:amp;gt; script.vbs /userid:anno/password:hogehoge If WScript.Arguments.Named.Exists("userid") then strUserID = WScript.Arguments.Named.Item("userid") End If If WScript.Arguments.Named.Exists("password") then strPassword = WScript.Arguments.Named.Item("password") End If PowerShell C:amp;gt; script.ps1 -userid anno -password hogehoge param([string] $UserID = “nouserid", [string] $Password = "nopassword") Write-HostOutput $userid Write-HostOutput $Password
  • 25. 変数の扱いと値の代入 バッチ Set LastName=Anno Set FirstName=Junichi Set FullName=“%FirstName% %LastName%” Set FullName=%FullName:"=% Echo %FullName% Echo %FullName:n=x% Echo %FullName:~8% Echo %FullName:~8,1% Echo %FullName:~-4,3% If /I %FullName:~-1,1%==o Echo OK Junichi Anno Juxichi Axxo Anno A Ann OK WSH FirstName = "Junichi" LastName = "Anno" FullName = FirstName & " " & LastName Wscript.Echo Split(FullName," ")(0) Junichi PowerShell $FirstName = "Junichi" $LastName = "Anno" $FullName = $FirstName + " " + $LastName Write-HostOutput $FullName $arrFullName = $FullName.Split(" ") Write-HostOutput $arrFullname[0] Junichi Anno Junichi
  • 26. 入出力方法 これを抑えておけば、ひとまずたいていのことはできます バッチ 画面への出力:Echo “Hello World” 画面からの入力:「choice」コマンド または 「set /p」コマンド ファイルへの出力:dir > list.txt または dir >> list.txt ファイルから入力: for /f "delims=" %i in ('type c:mpist.txt') do @echo %i WSH(VBScript) 画面への出力:Wscript.Echo“Hello World” 画面からの入力:Stdin.ReadLine ファイルへの出力:fso.OpenTextFile(“c:ist.txt”, 2 or 8) ファイルから入力:fso.OpenTextFile(“c:ist.txt”, 1) PowerShell 画面で確認 画面への出力:Write-Output“Hello” 画面からの入力:$InputData = Read-Host ファイルへの出力:Out-File -filepath C:mpist.txt -inputobject $Record ファイルから入力: $file = Get-Content -Path c:mpist.txt
  • 27. 入出力例~バッチファイル sample04.bat @Echo Off REM 年号変換 :InputYear Echo 西暦を入力してください(1868 - 2009) Set /p Year= CHOICE /C YN /T 60 /D y /M “%Year% 年で間違いないですか?“ IF %ERRORLEVEL%==2 GOTO :InputYear IF %Year% LSS 1868 ( Echo 西暦は 1868 - 2009 の範囲で指定してください GOTO :InputYear ) IF %Year% GTR 2009 ( Echo 年齢は 1868 - 2009 の範囲で指定してください GOTO :InputYear ) For /F "Tokens=1,2 Delims= " %%i in ('Type nengo.txt') Do Call :ChkNengo %Year% %%i %%j GOTO :END :ChkNengo IF %1==%3 ( Echo 西暦 %1年は %2 年です GOTO :END ) GOTO :EOF :END nengo.txt 明治1 1868 明治2 1869 明治3 1870 明治4 1871 ・ ・ 平成18 2006 平成19 2007 平成20 2008 平成21 2009 ファイルを1行読むたびに呼ばれる
  • 28. 入出力例 ~ WSH(VBScript) strYear = InputYear() strNengo = ChkNengo(strYear) Wscript.Echo "西暦" & strYear & "年は " & strNengo & "年です“ Function InputYear() Set StdIn = WScript.StdIn Set StdOut = WScript.StdOut Do WScript.Echo "西暦を入力してください(1868 - 2009)" tmpYear = StdIn.ReadLine If IsNumeric(tmpYear) Then StdOut.WriteLinetmpYear & " でよいですか?(Y/N)“ Select Case UCase(StdIn.ReadLine) Case "Y" If tmpYear >= 1868 and tmpYear <= 2009 Then Exit Do End If End Select End If Loop InputYear = tmpYear End Function sample05.vbs Function ChkNengo(strYear) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFS = objFSO.OpenTextFile("nengo.txt", 1) Do While objFS.AtEndOfStream <> True strRec = objFS.ReadLine arrRec = Split(strRec," ") If arrRec(1) = strYear Then ChkNengo = arrRec(0) Exit Do End If Loop objFS.Close End Function
  • 29. バッチファイルを極めるには 画面でヘルプを 見てみましょう IF 文を使いこなす Else だって使えます 環境変数を使いこなす 規定の環境変数には使えるものがいっぱい 遅延展開を意識しよう Set を使いこなす 文字列処理など多方面で活躍 計算も可能 ラベル と Call を使いこなす 処理を関数化することで再利用しやすい構造に For を使いこなす 繰り返し処理だけでなく、処理結果の受け取りにも コマンドをたくさん知っていると吉
  • 30. VBScript を極めるには DictionaryObject を使いこなす データ比較等の高負荷/高速処理に最適 アレイ値を使いこなす 戻り値がアレイタイプであることなんてしょっちゅう COM を使いこなす ADO(ActiveX Data Object) データベースアクセスだけでなくActive Directoryにも 文字コード変換等の裏技にも流用 ADSI(Active Directory Service Interfaces) Active Directoryを操作する WMI(Windows Management Instrumentation) 困ったときのWMI頼み,「監視」が得意 LogPerser ログの集計とグラフ化 WORD/PowerPoint/Excel/Access もCOM経由で操作可能
  • 31. VBScriptサンプル① ~ADOでADを検索 sample06.vbs ここ30日間 パスワード変更を実施していないユーザー一覧を取得する szDomain = "DC=annou,DC=com"intDaysBefore = 30 szDateTime = DateAdd(“d”, 0-intDaysBefore, Now)lngDateTime = CDateToInt8(szDateTime) Set objConnection = CreateObject(“ADODB.Connection”)objConnection.Open “Provider=ADsDSOObject;”Set objCommand = CreateObject(“ADODB.Command”)objCommand.ActiveConnection = objConnectionobjCommand.Properties(“Page Size”) = 20000objCommand.CommandText = “<LDAP://” & szDomain & “>;” & _        “(&(objectCategory=person)(objectClass=user)” & _  “(pwdLastSet<=” & lngDateTime & “));” & _  “cn,distinguishedName,pwdLastSet;“& "subtree"Set objRecordSet = objCommand.Execute Do Until objRecordset.EOF szDN   = objRecordset.Fields(“distinguishedName”)    szUser = objRecordset.Fields(“cn”)    lngpwdLastSet = objRecordset.Fields(“pwdLastSet”)    dtpwsLastSet = CInt8ToDate(lngpwdLastSet) WScript.EchoszUser & “,” & dtpwsLastSet objRecordset.MoveNextLoop いまから30日前の日時を計算 30日前の日付をINT8形式に変換 Active Directoryを検索 pwdLastSet は最後にパスワードが変更された日時に関する情報が格納されている。ただし、1601年1月1日0:00(標準時)を基準とし、単位は100ns。INT8形式。
  • 32. objConnection.CloseSet objCommand = Nothing Function CDateToInt8(szDateTime) dtDateValue = CDate(szDateTime) Set objShell = CreateObject(“Wscript.Shell”)    lngBias = TimeZoneBIOS() dtAdjusted = DateAdd(“n”, lngBias, dtDateValue) lngSeconds = DateDiff(“s”, #1/1/1601#, dtAdjusted) CDateToInt8 = CStr(lngSeconds) & "0000000"End Function Function TimeZoneBIOSSet objShell = CreateObject(“Wscript.Shell”) szKey = “HKLMystemurrentControlSetontrol & _   “TimeZoneInformationctiveTimeBias” lngBiasKey = objShell.RegRead(szKey) If UCase(TypeName(lngBiasKey)) = “LONG” Then   lngTZBias = lngBiasKey ElseIfUCase(TypeName(lngBiasKey)) = “VARIANT()” Then    lngTZBias = 0    For k = 0 To UBound(lngBiasKey)     lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)  Next End If TimeZoneBIOS = lngTZBiasEnd Function 標準時とのオフセット情報を取得 オフセットの変数タイプを取得
  • 33. Function CInt8ToDate(lngDateTime)  On Error Resume Next  lngAdjust = TimeZoneBIOS  lngHigh = lngDateTime.HighPart  lngLow = lngDateTime.LowPart  If lngLow < 0 Then lngHigh = lngHigh + 1  If (lngHigh = 0) And (lngLow = 0) Then lngAdjust = 0  lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) + lngLow) / 600000000 - lngAdjust) / 1440  CInt8ToDate = CDate(lngDate)  If Err.Number <> 0 Then    On Error GoTo 0    CInt8ToDate = #1/1/1601#  End IfEnd Function 基準年月日+pwdLastSet-9時間 パスワードが変更された日時を算出
  • 34. Vbscriptサンプル② ~ ADO でコード変換 sample07.vbs strFileNameに指定されたファイルを、ANSIからUTF-8に変換する r = ANSI2UTF8(strFileName) Function ANSI2UTF8(strFileName) adTypeBinary = 1: adTypeText = 2 : adCR= 13 : adCRLF= -1 adLF = 10 :adReadLine = -2 : adWriteLine= 1 : adSaveCreateOverWrite= 2 Set stmANSI = CreateObject("ADODB.Stream") Set stmUTF8 = CreateObject("ADODB.Stream") Set stmNoBOM = CreateObject("ADODB.Stream") stmANSI.Open stmANSI.Type = adTypeBinary stmANSI.LoadFromFilestrFileName stmANSI.Type = adTypeText stmANSI.LineSeparator = adCRLF stmANSI.Charset = "iso-2022-jp" stmUTF8.Open stmUTF8.Type = adTypeText stmUTF8.LineSeparator = adCRLF stmUTF8.CharSet = "UTF-8" Do Until stmANSI.EOS strData = stmANSI.ReadText(adReadLine) stmUTF8.WriteText strData , adWriteLine Loop コロンです! stmANSI.Close stmUTF8.Position = 0 : stmUTF8.Type = adTypeBinary stmUTF8.Position = 3 stmNoBOM.Open stmNoBOM.Type = adTypeBinary stmUTF8.CopyTo stmNoBOM stmUTF8.Close stmNoBOM.SaveToFilestrRec , adSaveCreateOverWrite stmNoBOM.Close End Function
  • 36. スクリプト作成を補助するツール 以下はダウンロードセンターからダウンロード可能 VBScript ADSI Scriptomatic WMI Scriptomatic WMI Code Creator お勧め PowerShell Scriptomatic for PowerShell その他(共通) お勧め WMI AdministrativeTools OLE/COM View WMIについては応用編で詳しく
  • 37. OLE/COM View(OLEVEW.exe) 使用するには Windows SDK をダウンロードセンターからダウンロードしてインストール ただしWin32 Development ToolsだけでOK インストール後、以下を実行   regsvr32 "c:rogram Filesicrosoft SDKsindows7.0inViewers.Dll" 何ができる? 使用可能なCOMコンポーネントの インターフェースを調べることが できる 使い方 ① タイプライブラリのファイル名を参照 ② レジストリエディタでファイル名を検索する ③ ProgIDキーでProgIDを取得する ④ プロパティ/メソッドはタイプライブラリの詳細情報を参照 ⑤ Setobj = CreateObject(“ProgID”)
  • 38. 安全なスクリプト Script Encoder ダウンロードセンターからダウンロード可能 スクリプトの「不可視化」が可能 対応ファイルasp,asa,cdx,html,htm,js,vbs,wsh,sct 拡張子が変更されることに注意 js -> jse vbs -> vbe 署名 Scripting.Signerオブジェクトを使用Set Signer = CreateObject("Scripting.Signer")
  • 39. Script Encoderによるエンコード例 危険!! strADsPath = "LDAP://CN=Administrator,CN=Users,DC=annou,DC=com" AdminUser = "administrator" AdminPass = "password" ADS_SECURE_AUTHENTICATION = 1 Set objProvider = GetObject("LDAP:") Set objUser = objProvider.OpenDSObject(strADsPath, AdminUser, _ AdminPass, ADS_SECURE_AUTHENTICATION) screnc adtest.vbs adtest.vbe #@~^VwEAAA==dDD)G/hlY4P{~Jdf)n=z&/g'jknDk~f;xCx W!~9Zx^K:E@#@&)NskUik+D~~{PEl9hbxrkYMlYKDr@#@&zNhk nCdkPP{~J^lD0hqV9^r@#@&b9j|?3Z`]2|biP_21P(;bPq}H,Px,F@#@&?Y,G4Nn.W7k[nMP',!+Dr4Nn^YvJdf)nlE*@#@&?OPK4%ik+D~x,W8Lh.K9+MRra+ 9?}4%+1YcdDDbGdnmYtB~m@#@&did~P~~,P~P,~P,P~~zN:rU`/nDB~|@#@&idiPd,P,~P,P)NskUKm//B~{@#@&di77P,P,P~P)9U{j2;iIA{)i:C2HP&Z)K&6g#@#@&flsAAA==^#~@
  • 40. まとめ どの言語を使うか迷ったら PowerShell を 適材適所を意識する必要はありません メンテナンス性を損なわないように工夫しましょう 機能ごとに関数化を 利用者にやさしいスクリプト作りを 名前付き引数 /? -? の実装(複雑にしすぎない) バッチファイルをうまく使いましょう
  • 41. さいごに スクリプト習得に必要なのは 「できないはずがない」という信念 サンプルを探し出す執念 回避策に逃げる柔軟性 わかりやすく努力が報われるのがスクリプトの世界です
  • 42. リソース Windows Script に関するリファレンス Windows スクリプトテクノロジ http://msdn.microsoft.com/ja-jp/library/cc392483.aspx IDGWindows Server World 過去の特集記事のアーカイブ 「システム管理スクリプトの教室 」 http://www.windows-world.jp/special/-/99809.html ADSI関連スクリプトについて解説 各種サンプル(Windows Script、PowerShell) スクリプトセンター http://www.microsoft.com/japan/technet/scriptcenter/default.mspx 基本的なスクリプトが満載 本日使用したスクリプト http://blogs.technet.com/junichia/pages/3221367.aspx
  • 43.
  • 48.
  • 49.