NetApp PowerShell Toolkitがあれば、NetAppの操作を
Windows PowerShellで行うことが出来ると知り、早速使ってみました。
1.NetApp PowerShell Toolkitのダウンロード
下記URLよりNetApp_PowerShell_Toolkit_9.7.1.0.msiをダウンロードします。
NetApp PowerShell Toolkit
https://mysupport-beta.netapp.com/site/tools/tool-eula/powershell-toolkit
※2020/06/28時点での最新Verは9.7.1です。
2.NetApp PowerShell Toolkitのインストール
NetApp_PowerShell_Toolkit_9.7.1.0.msiをダブルクリックすると、
インストーラーが起動するので、インストールして下さい。



3.NetAppへの接続
コマンドプロンプトにて、
powershell
Import-Module DataOnTap
Connect-NcController [NetAppのIP] -cred admin
でパスワードを要求されるので、
入力すると、NetAppに接続できます。
コマンドヘルプの表示
Get-NcHelp
ボリューム情報の表示
Get-NcVol
CIFS共有情報の表示
Get-NcCifsShare
CIFS共有アクセス権の表示
Get-NcCifsShareAcl
4.スクリプトの作成
NetAppのCIFS共有情報を取得して、災害時にDR側でSnapmirror先のNetAppで
CIFS共有設定を実施する時に実行するNetAppのコマンドを自動生成し、
指定のメールアドレス宛に添付ファイルを付けてメール送信するPowerShellスクリプトを
作成してみました。
get-cifs-share-info.ps1
$netapp = "NetAppのIPアドレス"
$user = "admin"
$pass = "パスワード"
$outfile1 = "C:\TEMP\Cifs-Share.csv"
$outfile2 = "C:\TEMP\Cifs-Share-ACL.csv"
$outfile3 = "C:\TEMP\Cifs-Share-Cmd.txt"
$outfile4 = "C:\TEMP\Cifs-Share-Cmd-Default-Acl-Delete.txt"
$outfile5 = "C:\TEMP\Cifs-Share-Cmd-Acl.txt"
#-------------------------------------------------------------------------
# function
#-------------------------------------------------------------------------
function Cifs-Info()
{
$logdata1 = "Cifs-Share"
Get-NcCifsShare | select @{Name="ShareName" ; Exp={$_.sharename}},
@{Name="Path" ; Exp={$_.path}}| Export-Csv -path $outfile1 -Encoding UTF8 -NoTypeInformation
}
function Cifs-ACL-Info()
{
$logdata2 = "Cifs-Share-ACL"
Get-NcCifsShareAcl | select @{Name="ShareName" ; Exp={$_.share}},
@{Name="UserOrGroup" ; Exp={$_.userorgroup}},
@{Name="Permission" ; Exp={$_.permission}}| Export-Csv -path $outfile2 -Encoding UTF8 -NoTypeInformation
}
function Create-Cmd-Cifs-Share()
{
$logdata3 = "Cifs-Share-Cmd"
$logdata3 | out-file $outfile3
Get-Date -Format g >> $outfile3
$Cifs_Share_Record = Import-Csv $outfile1 -Encoding UTF8
$Cifs_Share_Record2 = $Cifs_Share_Record | Where-Object {$_.sharename -notmatch "^c\$`$"} | Where-Object {$_.sharename -notmatch "^ETC\$`$"} | Where-Object {$_.sharename -notmatch "^home\$`$"}
$Cifs_Share_Record2 | foreach { "vserver cifs share create -vserver vserver1-svm1 -share-name " + $_.sharename + " -path " + $_.path + " -comment `"`"" } >> $outfile3
}
function Create-Cmd-Cifs-Default-Acl-Delete()
{
$logdata4 = "Cifs-Default-Acl-Delete-Cmd"
$logdata4 | out-file $outfile4
Get-Date -Format g >> $outfile4
$Cifs_Share_Record = Import-Csv $outfile1 -Encoding UTF8
$Cifs_Share_Record2 = $Cifs_Share_Record | Where-Object {$_.sharename -notmatch "^c\$`$"} | Where-Object {$_.sharename -notmatch "^ETC\$`$"} | Where-Object {$_.sharename -notmatch "^home\$`$"}
$Cifs_Share_Record2 | foreach { "vserver cifs share access-control delete -vserver vserver1-svm1 -share " + $_.sharename + " -user-or-group Everyone" } >> $outfile4
}
function Create-Cmd-Cifs-Acl()
{
$logdata5 = "Cifs-Acl-Cmd"
$logdata5 | out-file $outfile5
Get-Date -Format g >> $outfile5
$Cifs_Share_Acl_Record = Import-Csv $outfile2 -Encoding UTF8
$Cifs_Share_Acl_Record | foreach { "vserver cifs share access-control create -vserver vserver1-svm1 -share " + $_.sharename + " -user-group-type windows -user-or-group " + "`"" + $_.userorgroup + "`"" + " -permission " + $_.permission } >> $outfile5
}
function Send-Mail()
{
$From="Fromメールアドレス"
$Subject="DR切り替え時の投入コマンド"
$body="vserver1のDR切り替え時の投入コマンドを送信致します。"
# このファイルの場所を取得
$FilePath=Split-Path ( & { $myInvocation.ScriptName } ) -parent
$File1=@($outfile3)
$File2=@($outfile4)
$File3=@($outfile5)
$To="Toメールアドレス"
# 送信メールサーバーの設定
$SMTPServer="smtpサーバアドレス"
$Port="ポート番号"
$User="ユーザID"
$Password="パスワード"
$SMTPClient=New-Object Net.Mail.SmtpClient($SMTPServer,$Port)
# SSL暗号化通信しない $false
$SMTPClient.EnableSsl=$false
$SMTPClient.Credentials=New-Object Net.NetworkCredential($User,$Password)
# メールメッセージの作成
$MailMassage=New-Object Net.Mail.MailMessage($From,$To,$Subject,$body)
# ファイルから添付ファイルを作成
$Attachment1=New-Object Net.Mail.Attachment($File1)
$Attachment2=New-Object Net.Mail.Attachment($File2)
$Attachment3=New-Object Net.Mail.Attachment($File3)
# メールメッセージに添付
$MailMassage.Attachments.Add($Attachment1)
$MailMassage.Attachments.Add($Attachment2)
$MailMassage.Attachments.Add($Attachment3)
# メールメッセージを送信
$SMTPClient.Send($MailMassage)
}
#-------------------------------------------------------------------------
# Do-Initialize
#-------------------------------------------------------------------------
$password = ConvertTo-SecureString $pass -asplaintext -force
$cred = New-Object System.Management.Automation.PsCredential $user,$password
Import-Module DataOnTap
Connect-NcController $netapp -cred $cred
#-------------------------------------------------------------------------
# Main Application Logic
#-------------------------------------------------------------------------
Cifs-Info
Cifs-ACL-Info
Create-Cmd-Cifs-Share
Create-Cmd-Cifs-Default-Acl-Delete
Create-Cmd-Cifs-Acl
Send-Mail
5.スクリプトのタスクスケジューラへの登録
操作タブ
プログラム/スクリプト
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加(オプション)
-file “C:\TEMP\get-cifs-share-info4.ps1”
開始(オプション)
C:\TEMP