NetApp PowerShell Toolkitを使ってみました

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

Comments are closed.