Public/New-UnityCifsServer.ps1
Function New-UnityCIFSServer { <# .SYNOPSIS Create an SMB/CIFS server. .DESCRIPTION Create an SMB/CIFS server. You need to have an active session with the array. .NOTES Written by Erwan Quelin under MIT licence - https://github.com/equelin/Unity-Powershell/blob/master/LICENSE .LINK https://github.com/equelin/Unity-Powershell .PARAMETER Session Specify an UnitySession Object. .PARAMETER nasServer ID of the NAS server to which the SMB server belongs. .PARAMETER netbiosName Computer name of the SMB server in Windows network. .PARAMETER name User friendly, descriptive name of SMB server. .PARAMETER description Description of the SMB server. .PARAMETER domain Domain name where SMB server is registered in Active Directory, if applicable. .PARAMETER organizationalUnit LDAP organizational unit of SMB server in Active Directory, if applicable. .PARAMETER domainUsername Active Directory domain user name. .PARAMETER domainPassword Active Directory domain password. .PARAMETER reuseComputerAccount Reuse existing SMB server account in the Active Directory. .PARAMETER workgroup Standalone SMB server workgroup. .PARAMETER localAdminPassword Standalone SMB server administrator password. .PARAMETER interfaces List of file IP interfaces that service CIFS protocol of SMB server. .PARAMETER Confirm If the value is $true, indicates that the cmdlet asks for confirmation before running. If the value is $false, the cmdlet runs without asking for user confirmation. .PARAMETER WhatIf Indicate that the cmdlet is run only to display the changes that would be made and actually no objects are modified. .EXAMPLE New-UnityCIFSServer -Name CIFS01 -nasServer 'nas_6' -domain 'example.com' -domainUsername 'administrator' -domainPassword 'Password#123' -interfaces 'if_1' Create CIFS Server named 'CIFS01' #> [CmdletBinding(SupportsShouldProcess = $True,ConfirmImpact = 'High',DefaultParameterSetName="AD")] Param ( [Parameter(Mandatory = $false,HelpMessage = 'EMC Unity Session')] $session = ($global:DefaultUnitySession | where-object {$_.IsConnected -eq $true}), [Parameter(Mandatory = $false,Position = 1,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True,HelpMessage = 'User friendly, descriptive name of SMB server')] [String[]]$Name, [Parameter(Mandatory = $true,HelpMessage = 'ID of the NAS server to which the SMB server belongs')] [String]$nasServer, [Parameter(Mandatory = $false,HelpMessage = 'Computer name of the SMB server in Windows network')] [String]$netbiosName, [Parameter(Mandatory = $false,HelpMessage = 'Description of the SMB server')] [String]$Description, [Parameter(Mandatory = $false,ParameterSetName="AD",HelpMessage = 'Domain name where SMB server is registered in Active Directory, if applicable.')] [String]$domain, [Parameter(Mandatory = $false,ParameterSetName="AD",HelpMessage = 'LDAP organizational unit of SMB server in Active Directory, if applicable')] [String]$organizationalUnit, [Parameter(Mandatory = $false,ParameterSetName="AD",HelpMessage = 'Active Directory domain user name')] [String]$domainUsername, [Parameter(Mandatory = $false,ParameterSetName="AD",HelpMessage = 'Active Directory domain password')] [String]$domainPassword, [Parameter(Mandatory = $false,ParameterSetName="AD",HelpMessage = 'Reuse existing SMB server account in the Active Directory')] [Bool]$reuseComputerAccount, [Parameter(Mandatory = $false,ParameterSetName="Workgroup",HelpMessage = 'Standalone SMB server workgroup name')] [String]$workgroup, [Parameter(Mandatory = $false,ParameterSetName="Workgroup",HelpMessage = 'Is Snapshot Harvest Enabled')] [String]$localAdminPassword, [Parameter(Mandatory = $false,HelpMessage = 'List of file IP interfaces that service CIFS protocol of SMB server')] [String[]]$interfaces ) Begin { Write-Verbose "Executing function: $($MyInvocation.MyCommand)" ## Variables $URI = '/api/types/cifsServer/instances' $Type = 'Server CIFS' $StatusCode = 201 } Process { Foreach ($sess in $session) { Write-Verbose "Processing Session: $($sess.Server) with SessionId: $($sess.SessionId)" Foreach ($n in $Name) { #### REQUEST BODY # Creation of the body hash $body = @{} # nasServer argument $body["nasServer"] = @{} $nasServerArg = @{} $nasServerArg["id"] = "$($nasServer)" $body["nasServer"] = $nasServerArg # netbiosName argument If ($PSBoundParameters.ContainsKey('netbiosName')) { $body["netbiosName"] = "$($netbiosName)" } # Name argument If ($PSBoundParameters.ContainsKey('Name')) { $body["name"] = "$($name)" } # Description argument If ($PSBoundParameters.ContainsKey('description')) { $body["description"] = "$($description)" } # domain argument If ($PSBoundParameters.ContainsKey('domain')) { $body["domain"] = "$($domain)" } # organizationalUnit argument If ($PSBoundParameters.ContainsKey('organizationalUnit')) { $body["organizationalUnit"] = "$($organizationalUnit)" } # domainUsername argument If ($PSBoundParameters.ContainsKey('domainUsername')) { $body["domainUsername"] = "$($domainUsername)" } # domainPassword argument If ($PSBoundParameters.ContainsKey('domainPassword')) { $body["domainPassword"] = "$($domainPassword)" } # reuseComputerAccount argument If ($PSBoundParameters.ContainsKey('reuseComputerAccount')) { $body["reuseComputerAccount"] = $reuseComputerAccount } # workgroup argument If ($PSBoundParameters.ContainsKey('workgroup')) { $body["workgroup"] = "$($workgroup)" } # localAdminPassword argument If ($PSBoundParameters.ContainsKey('localAdminPassword')) { $body["localAdminPassword"] = "$($localAdminPassword)" } #interfaces argument If ($PSBoundParameters.ContainsKey('interfaces')) { $body['interfaces'] = @() Foreach ($int in $interfaces) { $ÎntArgument = @{} $ÎntArgument['id'] = "$($int)" $body["interfaces"] += $ÎntArgument } } ####### END BODY - Do not edit beyond this line #Show $body in verbose message $Json = $body | ConvertTo-Json -Depth 10 Write-Verbose $Json If ($Sess.TestConnection()) { ##Building the URL $URL = 'https://'+$sess.Server+$URI Write-Verbose "URL: $URL" #Sending the request If ($pscmdlet.ShouldProcess($Sess.Name,"Create $Type $n")) { $request = Send-UnityRequest -uri $URL -Session $Sess -Method 'POST' -Body $Body } Write-Verbose "Request status code: $($request.StatusCode)" If ($request.StatusCode -eq $StatusCode) { #Formating the result. Converting it from JSON to a Powershell object $results = ($request.content | ConvertFrom-Json).content Write-Verbose "$Type with the ID $($results.id) has been created" Get-UnityCifsServer -Session $Sess -ID $results.id } # End If ($request.StatusCode -eq $StatusCode) } # End If ($Sess.TestConnection()) } # End Foreach } # End Foreach ($sess in $session) } # End Process } # End Function |