diff --git a/HPOneView.120.format.ps1xml b/HPOneView.120.format.ps1xml deleted file mode 100644 index 9a733f1..0000000 --- a/HPOneView.120.format.ps1xml +++ /dev/null @@ -1,327 +0,0 @@ - - - - - connections - - HPOneView.Profile.Connection - - - - - - 2 - Left - - - - 12 - Left - - - - 30 - Left - - - - 12 - Left - - - - 10 - Left - - - - 20 - Left - - - - 10 - Left - - - - 32 - Left - - - - - - - id - - - functionType - - - $profileCache[$_.networkUri] - - - "{0} Gbps" -f ($_.requestedMbps / 1000) - - - "{0} Gbps" -f ($_.maximumMbps / 1000) - - - $bootSetting = @() - $bootSetting += $_.boot.priority - if ($_.boot.targets) { - - for ($i=0; $i -eq $boot.targets.count; $i++) { $bootSetting += "WWN $($_.boot.targets[$i].arrayWwpn)`nLUN $($_.boot.targets[$i].lun)" } - - } - elseif ($_.functionType -eq "FibreChannel" -and -not ($_.boot.priority -eq "NotBootable") -and -not ($_.boot.targets)) { $bootSetting += "(Use Adapter BIOS)" } - $bootSettingString = $bootSetting | Out-String | % { $_ -replace '^\s+|\s+$' } - $bootSettingString - - - portId - - - $address = @() - - if ($_.macType -eq "Virtual" -and $_.mac) { $address += "MAC $($_.mac) (V)" } - elseif ($_.macType -eq "Physical" -and $_.mac) { $address += "MAC $($_.mac) (p)" } - - if ($_.wwpnType -eq "Virtual" -and $_.wwnn) { $address += "WWNN $($_.wwnn) (v)"} - elseif ($_.wwpnType -eq "Physical" -and $_.wwnn) { $address += "WWNN $($_.wwnn) (p)" } - - if ($_.wwpnType -eq "Virtual" -and $_.wwpn) { $address += "WWPN $($_.wwpn) (v)"} - elseif ($_.wwpnType -eq "Physical" -and $_.wwpn) { $address += "WWPN $($_.wwpn) (p)" } - - $address | Out-String | % { $_ -replace '^\s+|\s+$' } - - - - - - - - sanvolumes - - HPOneView.Profile.SanVolume - - - - - - 9 - Left - - - - 6 - Left - - - - 20 - Left - - - - 4 - Left - - - - 20 - Left - - - - 8 - Left - - - - 12 - Left - - - - 7 - Left - - - - - - - id - - - status - - - "{0}" -f $profileCache[$_.volumeUri].name - - - lunType - - - "{0}" -f $profileCache[$_.volumeStoragePoolUri].name - - - "{0} GB" -f ($profileCache[$_.volumeUri].provisionedCapacity / 1gb) - - - "{0}" -f $profileCache[$_.volumeUri].provisionType - - - if ($profileCache[$_.volumeUri].shareable) { "{0}" -f "Shared" } else { "{0}" -f "Private" } - - - - - - - - SmtpConfigurationObject - - HPOneView.Appliance.SmtpConfiguration - - - - - - - - alertEmailDisabled - - - - senderEmailAddress - - - - smtpServer - - - - smtpPort - - - - alertEmailDisabled - - - - - - - - TaskObject - - HPOneView.Appliance.TaskResource - - - - - - - - name - - - - owner - - - - taskState - - - - percentComplete - - - - progressUpdates - - - - taskErrors - - - - created - - - - modified - - - - parentTaskUri - - - - - - - - LicenseKey - - HPOneView.Appliance.LicenseKey - - - - - - - - Product - - - - availableCapacity - - - - $_.nodes.count - - - - TotalCapacity - - - - unlicensedCount - - - - - - - - UserRole - - HPOneView.Appliance.UserRole - - - - - - 22 - Left - - - - - - - roleName - - - - - - - - \ No newline at end of file diff --git a/HPOneView.120.psd1 b/HPOneView.120.psd1 index b2cc987..bad39ca 100644 Binary files a/HPOneView.120.psd1 and b/HPOneView.120.psd1 differ diff --git a/HPOneView.120.psm1 b/HPOneView.120.psm1 index 6c08abc..82bce48 100644 --- a/HPOneView.120.psm1 +++ b/HPOneView.120.psm1 @@ -104,15 +104,25 @@ THE SOFTWARE. | - Fixed New-HPOVUplinkSet where -NativeEthNetwork was not being set correctly. | - Updated New-HPOVUplinkSet to support Object types for NativeEthNetwork parameter. | - Updated Send-HPOVRequest to generate terminating error for HTTP 404 and 500 conditions. - | - Updated Connect-HPOVMgmt to generate terminating error for expired passwords. Please update your script to catch HPOneView.Appliance.PasswordChangeRequired instead of lookging for a return HTTP Status Code. + | - Updated Connect-HPOVMgmt to generate terminating error for expired passwords. Please update your script to catch HPOneView.Appliance.PasswordChangeRequired instead of looking for a return HTTP Status Code. | - Updated ApplianceConfig_Sample.ps1 to show how to configure a new appliance. | - Added Get-HPOVRemoteSyslog and Set-HPOVRemoteSyslog cmdlets. | - Added dependancy to FormatPX PowerShell module to fix PowerShell's Format-* cmdlet output. +------------------------------------------ +1.20.0164.0 + | - Fixed Show-HPOVSSLCertificate error handling + | - Fixed Connect-HPOVMgmt Error Handling + | - Fixed Update-HPOVStorageSystem where a variable collision would occur reulting in erronuous error. + | - Removed modifying PowerShell prompt. Set-HPOVPrompt is now deprecated. Please use Show-HPOVAppliance to see what appliance you are connected to. + | - Added support for Microsoft Desired State Configuration automation with Microsoft System Center Service Management Automation. Please refer to Enable-HPOVMSDSC for more information. + | - Added Verbose support for PSM1 executed code during Import-Module -verbose. #> #Set HPOneView POSH Library Version #Increment 3rd string by taking todays day (e.g. 23) and hour in 24hr format (e.g. 14), and adding to the prior value. -$script:scriptVersion = "1.20.0124.0" +$script:scriptVersion = "1.20.0164.0" +$Global:CallStack = Get-PSCallStack +$verbose = ($Global:CallStack | ? { $_.Command -eq "" }).position.text -match "-verbose" #Check to see if another module is loaded in the console, but allow Import-Module to process normally if user specifies the same module name if ($(get-module -name HPOneView*) -and (-not $(get-module -name HPOneView* | % { $_.name -eq "HPOneView.120"}))) { @@ -878,8 +888,8 @@ $Source = @" "@ -$Results = $CSharpProvider.CompileAssemblyFromSource($Params,$Source) -$Assembly = $Results.CompiledAssembly +$CompileResults = $CSharpProvider.CompileAssemblyFromSource($Params,$Source) +$Assembly = $CompileResults.CompiledAssembly $debugMode = $False @@ -1242,105 +1252,59 @@ function Set-HPOVPrompt { ) - - Process { - - if ($Enable) { - - $Value = "Enabled" - - } - - if ($Disable) { - - $Value = "Disabled" - - } - - if ($global) { - - Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Setting Global Prompt setting." - - #Get Library Global Prompt Setting - $regkey = "HKLM:\Software\Hewlett-Packard\HPOneView" - $regValueName = "Prompt" - - } - - else { - - Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Setting Per User Prompt setting." - - #Get Library Per User Prompt Setting - $regkey = "HKCU:\Software\Hewlett-Packard\HPOneView" - $regValueName = "Prompt" - - } - - $RegQueryPrompt = Get-ItemProperty $regkey $regValueName -ErrorAction SilentlyContinue - - #Create if it doesn't exist - if (! $RegQueryPrompt) { - - Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Prompt (REG_SZ) at $regkey does not exist. Creating, and setting to default 'Enabled'." - - #If Global, need to check for UAC and elevate the call to Net-ItemProperty - #Need to elevate users prviledges due to UAC policy - if ($global) { - if ($pscmdlet.ShouldProcess("Setting Global Prompt Policy",'Are you sure?')) { - If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { + Write-Warning "This CMDLET has been deprecated. No processing will be performed." - Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Requesting to elevate user access due to UAC." +} - $arguments = "`"if (! (test-path $regkey)) { Md $regkey }; New-ItemProperty $regkey -Name $regValueName -Value Enabled -PropertyType String`"" +function Enable-HPOVMSDSC { - Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -WindowStyle Hidden + # .ExternalHelp HPOneView.120.psm1-help.xml - } + [CmdletBinding()] + Param () - #Else, UAC not enabled for HKLM write access, or per user setting - else { + Begin { } - if (! (test-path $regkey)) { Md $regkey } + Process { - New-ItemProperty $regkey -Name $regValueName -Value $value -PropertyType "String" + $RegKey = "HKCU:\Software\Hewlett-Packard\HPOneView" - } - } - } + if (-not(Test-Path $RegKey)) { New-Item -Path $RegKey -force | Write-Verbose } - else { + $UseMSDSC = [bool](Get-ItemProperty -LiteralPath $regkeyGlobal -ea silentlycontinue).'UseMSDSC' - if (! (test-path $regkey)) { Md $regkey } + if (-not($UseMSDSC)) { New-ItemProperty -Path $RegKey -Name UseMSDSC -Value 1 -Type DWORD | write-verbose } + else { Set-ItemProperty -Path $RegKey -Name UseMSDSC -Value 1 -Type DWORD | write-verbose } - New-ItemProperty $regkey -Name $regValueName -Value $value -PropertyType "String" + } - } + End { } - } +} - else { +function Disable-HPOVMSDSC { - Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Prompt (REG_SZ) at $regkey does exists. Setting to $($Value)." + # .ExternalHelp HPOneView.120.psm1-help.xml - Set-ItemProperty $regkey -Name $regValueName -Value $Value + [CmdletBinding()] + Param () - } + Begin { } - $RegQueryPrompt = Get-ItemProperty $regkey $regvalue -ErrorAction SilentlyContinue + Process { - #Control how the Prompt function will behave - $script:HPOneViewLibraryPrompt = ($RegQueryPrompt).Prompt + $RegKey = "HKCU:\Software\Hewlett-Packard\HPOneView" - switch ($script:HPOneViewLibraryPrompt) { + if (-not(Test-Path $RegKey)) { New-Item -Path $RegKey -force | Write-Verbose } - "Enabled" { Prompt } + $UseMSDSC = [bool](Get-ItemProperty -LiteralPath $regkeyGlobal -ea silentlycontinue).'UseMSDSC' - "Disabled" { Invoke-Expression $Global:prompt_old } + if (-not($UseMSDSC)) { New-ItemProperty -Path $RegKey -Name UseMSDSC -Value 0 -Type DWORD | write-verbose } + else { Set-ItemProperty -Path $RegKey -Name UseMSDSC -Value 0 -Type DWORD | write-verbose } - } + } - } + End { } } @@ -1483,14 +1447,18 @@ function Send-HPOVRequest { } + write-verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] SSLCheckFlag: $script:SSLCheckFlag" + #Check how to handle SSL Certificates - if (! $script:SSLCheckFlag) { + if (-not($script:SSLCheckFlag)) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] SSL Certificate has not been checked." #Out-Host is IMPORTANT, otherwise, the Certificate Details will NOT display when called from Connect-HPOVMgmt, or any other cmdlet for that matter. Try { Show-HPOVSSLCertificate | Out-Host } catch [System.Net.WebException] { + + write-verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Caught WebException error after calling Show-HPOVSSLCertificate" if ($_.FullyQualifiedErrorId -match "ApplianceNotResponding") { @@ -1498,11 +1466,31 @@ function Send-HPOVRequest { $PSCmdlet.ThrowTerminatingError($errorRecord) } + else { + + $errorRecord = New-ErrorRecord HPOneView.Appliance.NetworkConnectionException UnknownError ResourceUnavailable 'Send-HPOVRequest' -Message "Unable to connect to '$Appliance' due to unknown error [$($_.Exception.Message)]." #-verbose + $PSCmdlet.ThrowTerminatingError($errorRecord) + + } } + catch { + + write-verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Caught OTHER error after calling Show-HPOVSSLCertificate" + + $errorRecord = New-ErrorRecord HPOneView.Appliance.NetworkConnectionException UnknownError ResourceUnavailable 'Send-HPOVRequest' -Message "Unable to connect to '$Appliance' due to unknown error [$($_.Exception.Message)]." #-verbose + $PSCmdlet.ThrowTerminatingError($errorRecord) + + } #If cert is untrusted, set ServicePointManager to ignore cert checking - if ($global:certTrusted -eq $False) { [System.Net.ServicePointManager]::CertificatePolicy = new-object HPOneView.HPOneViewIgnoreCertPolicy } + if ($global:certTrusted -eq $False) { + + Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] SSL Certificate is untrusted. Setting HPOneView.HPOneViewIgnoreCertPolicy policy." + + [System.Net.ServicePointManager]::CertificatePolicy = new-object HPOneView.HPOneViewIgnoreCertPolicy + + } $script:SSLCheckFlag = $True } @@ -1510,7 +1498,7 @@ function Send-HPOVRequest { #Need to check for authenticated session when the URI passed is not value of $script:loginSessionsUri Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Requested URI: $($uri)" - If ((!$global:cimgmtSessionId ) -and ($uri -ine $script:loginSessionsUri)) { + If ((-not($global:cimgmtSessionId)) -and ($uri -ine $script:loginSessionsUri)) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] We have reached the URI Whitelist condition block" @@ -2026,7 +2014,7 @@ function Wait-HPOVApplianceStart { $flag = $false <# Used to control displaying either output messages #> #Check to see if SSL Certificate trust has been validated - if (! $script:SSLCheckFlag) { + if (-not($script:SSLCheckFlag)) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] SSL Certificate has not been checked before." @@ -2229,8 +2217,8 @@ function Connect-HPOVMgmt { } catch [HPOneView.Appliance.NetworkConnectionException] { - $errorRecord = New-ErrorRecord HPOneView.Appliance.NetworkConnectionException ApplianceNotResponding ResourceUnavailable 'Connect-HPOVMgmt' -TargetType "CMDLET" -Message "Unable to connect to '$Appliance' due to timeout." #-verbose - $PSCmdlet.ThrowTerminatingError($errorRecord) + $errorRecord = New-ErrorRecord HPOneView.Appliance.NetworkConnectionException ($_.FullyQualifiedErrorId -split(","))[0] $_.CategoryInfo.Category 'Connect-HPOVMgmt' -TargetType "CMDLET" -Message $_.Exception.Message #-verbose + $PSCmdlet.ThrowTerminatingError($errorRecord) } @@ -2386,7 +2374,7 @@ function Disconnect-HPOVMgmt { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Bound PS Parameters: $($PSBoundParameters | out-string)" - If (!$global:cimgmtSessionId) { + If (-not($global:cimgmtSessionId)) { $errorRecord = New-ErrorRecord HPOneview.Appliance.AuthSessionException NoAuthSession ResourceUnavailable 'Disconnect-HPOVMgmt' -Message "No valid logon session available. Please use Connect-HPOVMgmt to connecto to an appliance, and then use Disconnect-HPOVmgmt to terminate your session." #-verbose $PSCmdlet.ThrowTerminatingError($errorRecord) @@ -3971,7 +3959,7 @@ function Set-HPOVApplianceNetworkConfig { } #} - if(!$configured){ + if (-not($configured)) { $freeMacs = Send-HPOVRequest $script:applMacAddresses if($freeMacs.members | ? {$_.device -eq $device}){ $macAddr = ($freeMacs.members | ? {$_.device -eq $device}).macAddress @@ -4052,12 +4040,12 @@ function Set-HPOVApplianceNetworkConfig { if ($importConfig.applianceNetworks[$i].searchDomains -is "String"){ $importConfig.applianceNetworks[$i].searchDomains = @() } - if (!$importConfig.applianceNetworks[$i].macAddress){ + if (-not($importConfig.applianceNetworks[$i].macAddress)) { $macAddr = ($currentConfig.applianceNetworks | ? {$_.device -eq $importConfig.applianceNetworks[$i].device}).macAddress - if(!$macAddr){ + if(-not($macAddr)) { $macAddr = ($freeMacs.members | ? {$_.device -eq $importConfig.applianceNetworks[$i].device}).macAddress } - if(!$macAddr){ + if(-not($macAddr)){ $errorRecord = New-ErrorRecord InvalidOperationException ApplianceNICResourceNotFound ObjectNotFound 'Get-HPOVStorageSystem' -Message ($importConfig.applianceNetworks[$i].device + "does not exist on the appliance.") #-verbose #$errMessage = $importConfig.applianceNetworks[$i].device + "does not exist on the appliance." #Throw $errMessage @@ -4577,7 +4565,7 @@ function New-HPOVSupportDump { #Validate the path exists. If not, create it. Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Validating $($Location) exists" - if (!(Test-Path $Location)) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] $($Location) Directory does not exist. Creating directory..."; New-Item -ItemType directory -path $Location } + if (-not(Test-Path $Location)) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] $($Location) Directory does not exist. Creating directory..."; New-Item -ItemType directory -path $Location } } @@ -4704,7 +4692,7 @@ Function New-HPOVBackup { Process { #Validate the path exists. If not, create it. - if (!(Test-Path $Location)){ + if (-not(Test-Path $Location)){ Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Directory does not exist. Creating directory..." New-Item $Location -itemtype directory } @@ -5213,7 +5201,7 @@ function Get-HPOVScmbCertificates { } #Validate the path exists. If not, create it. - if (!(Test-Path $Location)){ + if (-not(Test-Path $Location)){ Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Directory does not exist. Creating directory..." New-Item -path $Location -ItemType Directory } @@ -5335,38 +5323,68 @@ function Show-HPOVSSLCertificate { #Attempt connection to appliance. try { $Response = $WebRequest.GetResponse() } - catch [Net.WebException] { - - $e = $_ - Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] System.Net.WebException caught." - - if ($e.exception.InnerException.Status -eq "TrustFailure") { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Certificate failed trust validation." } - - elseif ($e.Exception -match "The remote name could not be resolved") { + catch [System.Net.WebException] { + + #write-host "Exception GM:" + #$errorObject.Exception | GM -view all + # + #write-host "InnerException GM:" + #$errorObject.Exception.InnerException | GM -view all + # + ## + ##write-host "InnerException.Status:" $_.Exception.InnerException.Status + ## + ##write-host "Exception.Message" $_.Exception.Message + # + ##$e = $_ + ##write-host $error[-1].exception.InnerException.Status + ##write-host $error[-1].exception.InnerException | gm -view all + #write-host "Exception: $($errorObject.Exception | out-string)" + #write-host "InnerExcpetion: $($errorObject.Exception.InnerException | out-string)" + #write-host "InnerExcpetion Status: $($errorObject.Exception.InnerException.Status | out-string)" + #$errorObject.Exception.Status -match "TrustFailure" + #$_.Exception.Status -match "TrustFailure" + #write-host "Exception Message: $($errorObject.Exception.Message)" + + Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] [System.Net.WebException] code block." + + if ($_.Exception.Status -match "TrustFailure") { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Certificate failed trust validation." } + + elseif ($_.Exception -match "The remote name could not be resolved") { $errorRecord = New-ErrorRecord System.Net.WebException ApplianceNotResponding ObjectNotFound 'Show-HPOVSslCertificate' -Message "Unable to resolve hostname '$Appliance'. Please check the name and try again." #-verbose $PSCmdlet.ThrowTerminatingError($errorRecord) - + } - - elseif ($e.Exception -match "Unable to connect to the remote server") { - + + #elseif ($_.Exception -match "Unable to connect to the remote server") { + elseif ($_.Exception.Message -contains "Unable to connect to the remote server") { + $errorRecord = New-ErrorRecord System.Net.WebException ApplianceNotResponding ConnectionError 'Show-HPOVSslCertificate' -Message "Unable to connect to '$Appliance' due to timeout or remote system didn't respond to the connection request." #-verbose $PSCmdlet.ThrowTerminatingError($errorRecord) - + } - + else { - + Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Other error caught." - - $errorRecord = New-ErrorRecord System.Net.WebException WebExceptionInvalidResult InvalidResult 'Show-HPOVSslCertificate' -Message $e.Exception.Message #-verbose + + $errorRecord = New-ErrorRecord System.Net.WebException WebExceptionInvalidResult InvalidResult 'Show-HPOVSslCertificate' -Message $_.Exception.Message #-verbose $PSCmdlet.ThrowTerminatingError($errorRecord) - + } } + + catch { + + write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Non-Specific CATCH block." + + $errorRecord = New-ErrorRecord System.Net.WebException WebExceptionInvalidResult InvalidResult 'Show-HPOVSslCertificate' -Message $_.Exception.Message #-verbose + $PSCmdlet.ThrowTerminatingError($errorRecord) + + } #Close the response connection, as it is no longer needed, and will cause problems if left open. if ($response) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Closing response connection"; $Response.Close() } @@ -5397,9 +5415,9 @@ function Show-HPOVSSLCertificate { } #If the certificate is NOT valid, display it and warn user - if ((! $certObject.CertificateIsValid) -and ($certObject.ErrorInformation -contains "UntrustedRoot")) { + if ((-not($certObject.CertificateIsValid)) -and ($certObject.ErrorInformation -contains "UntrustedRoot")) { - Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Cert is NOT trusted" + Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Cert Root is NOT trusted" #Display the certificate output in Yellow $originalFGColor = [System.Console]::ForegroundColor @@ -6051,7 +6069,7 @@ function Set-HPOVServerPower { #Validate input object type #Checking if the input is System.String and is NOT a URI - if (($server -is [string]) -and (!$server.StartsWith($script:serversUri))) { + if (($server -is [string]) -and (-not($server.StartsWith($script:serversUri)))) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Server is a Server Name: $($server)" Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Getting Server URI" @@ -6096,7 +6114,7 @@ function Set-HPOVServerPower { #Validate the server power state and lock $serverPowerState = Send-HPOVRequest $serverUri - if (($serverPowerState.powerState -ine $powerState) -and (!$serverPowerState.powerLock)) { + if (($serverPowerState.powerState -ine $powerState) -and (-not($serverPowerState.powerLock))) { #Enforce the proper string case $powerState = (Get-Culture).TextInfo.ToTitleCase($powerState) @@ -6752,7 +6770,7 @@ function Update-HPOVEnclosure { Process { - if (! $Enclosure) { + if (-not($Enclosure)) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Enclosure parameter not provided. Calling Get-HPOVEnclosure for all Enclosure resources." $Enclosures = Get-HPOVEnclosure @@ -7914,7 +7932,7 @@ function Enclosure-Report { @{Expression={$_.romVersion};Label="System ROM";width=15}, ` @{Expression={($_.mpModel + " " + $_.mpFirmwareVersion)};Label="iLO Firmware Version";width=22}, ` @{Expression={ - if (!$_.serverProfileUri){ 'No Profile' } + if (-not($_.serverProfileUri)){ 'No Profile' } else { (Send-HPOVRequest $_.serverProfileUri).name } };Label="Server Profile";width=30},` @{Expression={$_.licensingIntent};Label="Licensing";width=15} @@ -8025,7 +8043,7 @@ function Remove-HPOVEnclosure { } - if (!$enclosureNameOrUri) { + if (-not($enclosureNameOrUri)) { $errorRecord = New-ErrorRecord System.ArgumentException InvalidParameter InvalidArgument "Remove-HPOVEnclosure" -Message "Invalid enclosure parameter: $encl" #-verbose $PSCmdlet.ThrowTerminatingError($errorRecord) @@ -9275,7 +9293,7 @@ function Update-HPOVStorageSystem { process { - if (-not $StorageSystem) { + if (-not ($StorageSystem)) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] No Storage System resource(s) provided. Calling Get-HPOVStorageSystem." $StorageSystem = Get-HPOVStorageSystem @@ -9313,6 +9331,8 @@ function Update-HPOVStorageSystem { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Storage System resource object provided" Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Storage System Name: $($system.name)" Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Storage System URI: $($system.uri)" + + $ss = $system } else { @@ -9568,13 +9588,15 @@ function Add-HPOVStorageSystem { if ($connectedStorageSystem.unmanagedDomains -contains $Domain){ Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Found Virtual Domain '$Domain'." + #The domain exists, update the managedDomain property $connectedStorageSystem.managedDomain = $Domain #remove the domain from the unManagedDomains property - $unManaged=@() - $unManaged = $connectedStorageSystem.unmanagedDomains | ? {$_ -ne $Domain} - $connectedStorageSystem.unmanagedDomains = $unManaged + [Array]$unManaged = @() + [Array]$unManaged = $connectedStorageSystem.unmanagedDomains | ? {$_ -ne $Domain} + [Array]$connectedStorageSystem.unmanagedDomains = $unManaged + } else { @@ -9582,10 +9604,9 @@ function Add-HPOVStorageSystem { Send-HPOVRequest -uri $connectedStorageSystem.uri -method DELETE $errorRecord = New-ErrorRecord InvalidOperationException StorageDomainResourceNotFound ObjectNotFound 'Add-HPOVStorageSystem' -Message "Storage Domain, '$Domain', not found. Please check the storage domain exist on the storage system." #-verbose - #Generate Terminating Error $PSCmdlet.ThrowTerminatingError($errorRecord) + } - #$ports.Keys | %{ "key is: $($_), value is $($ports[$_])" } } @@ -9596,7 +9617,6 @@ function Add-HPOVStorageSystem { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Task error occurred. Generating error message." $errorRecord = New-ErrorRecord InvalidOperationException $storageSystemDiscoveredTask.taskErrors[0].errorCode InvalidResult 'Add-HPOVStorageSystem' -Message "$($storageSystemDiscoveredTask.taskErrors[0].message)" #-verbose - #WRITE-ERROR "AN ERROR OCURRED. $($storageSystemDiscoveredTask.taskErrors[0].errorCode) $($storageSystemDiscoveredTask.taskErrors[0].message)" -ErrorAction Stop $PSCmdlet.ThrowTerminatingError($errorRecord) } @@ -9675,7 +9695,7 @@ function Remove-HPOVStorageSystem { } - if (!$ssNameOrUri) { + if (-not($ssNameOrUri)) { if ($ss.name) { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] The storage system '$($ss.nam)' provided was not found. Please check the storageSystem parameter value and try again." } else { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] The storage system '$($ss)' provided was not found. Please check the storageSystem parameter value and try again." } @@ -12673,7 +12693,7 @@ function New-HPOVNetwork { Begin { - If (!$global:cimgmtSessionId) { + If (-not($global:cimgmtSessionId)) { $errorRecord = New-ErrorRecord HPOneview.Appliance.AuthSessionException ResourceExists AuthenticationError $script:HPOneViewAppliance -Message "You are already logged into $Appliance. Please use Disconnect-HPOVMgmt to end your existing session, and then call Connect-HPOVMgmt again." #-verbose $PSCmdlet.ThrowTerminatingError($errorRecord) @@ -16937,7 +16957,7 @@ function New-HPOVUplinkSet { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Native Network object provided: $($nativeEthNetwork | Out-String)" - $nativeEthNetworkUri = $network.uri + $nativeEthNetworkUri = $nativeEthNetwork.uri } @@ -16956,7 +16976,7 @@ function New-HPOVUplinkSet { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Native Ethernet Network URI provided '$nativeEthNetworkUri'." - $nativeEthNetworkUri = $network + $nativeEthNetworkUri = $nativeEthNetwork } elseif ($nativeEthNetwork.StartsWith('/rest/')){ @@ -16969,7 +16989,7 @@ function New-HPOVUplinkSet { Write-Verbose "[$($MyInvocation.InvocationName.ToString().ToUpper())] Getting `"$($nativeEthNetworkUri)`" URI" - $ret = Get-HPOVNetwork $network -type Ethernet + $ret = Get-HPOVNetwork $nativeEthNetwork -type Ethernet $nativeEthNetworkUri = $ret.uri @@ -22732,13 +22752,12 @@ function New-HPOVLicense { } } + } - End { + End { $ret - } - } } @@ -23231,6 +23250,8 @@ Export-ModuleMember -Function Enable-HPOVDebug Export-ModuleMember -Function Disable-HPOVDebug Export-ModuleMember -Function Get-HPOVRemoteSyslog Export-ModuleMember -Function Set-HPOVRemoteSyslog +Export-ModuleMember -Function Enable-HPOVMSDSC +Export-ModuleMember -Function Disable-HPOVMSDSC #Appliance Configuration: Export-ModuleMember -Function Get-HPOVApplianceCertificateStatus @@ -23414,63 +23435,42 @@ $script:AuthProviderSetting = (Get-ItemProperty "HKCU:\Software\Hewlett-Packard\ # #Check to see if Global Policy is set first. -$regkeyGlobal = "HKLM:\Software\Hewlett-Packard\HPOneView" -$regkeyUser = "HKCU:\Software\Hewlett-Packard\HPOneView" -$regValueName = "Prompt" - -#$RegQueryGlobalPrompt = Get-ItemProperty $regkeyGlobal $regValueName -ErrorAction SilentlyContinue -If (Test-Path "HKLM:\Software\Hewlett-Packard\HPOneView") { $RegQueryGlobalPrompt = Get-ItemProperty $regkeyGlobal $regValueName -ErrorAction SilentlyContinue } - -#$RegQueryUserPrompt = Get-ItemProperty $regkeyUser $regValueName -ErrorAction SilentlyContinue -If (Test-Path "HKCU:\Software\Hewlett-Packard\HPOneView"){ $RegQueryGlobalPrompt = Get-ItemProperty $regkeyUser $regValueName -ErrorAction SilentlyContinue} - -#Per User Setting overrides Global -if (($RegQueryUserPrompt) -and ($RegQueryGlobalPrompt)) { $RegQueryPrompt = $RegQueryUserPrompt } -elseif ((! $RegQueryUserPrompt) -and ($RegQueryGlobalPrompt)) { $RegQueryPrompt = $RegQueryGlobalPrompt } -elseif (($RegQueryUserPrompt) -and (!$RegQueryGlobalPrompt)) { $RegQueryPrompt = $RegQueryUserPrompt } - -#Create Per-User if it and Global doesn't exist -else { - - $RegQueryPrompt = @{Prompt = "Enabled"} - -} +$regkeyGlobal = "HKLM:\Software\Hewlett-Packard\HPOneView" +$regkeyUser = "HKCU:\Software\Hewlett-Packard\HPOneView" +$UserUseMSDSC = [bool](Get-ItemProperty -LiteralPath $regkeyUser -ea silentlycontinue).'UseMSDSC' -#Control how the Prompt function will behave -$script:HPOneViewLibraryPrompt = ($RegQueryPrompt).Prompt +Write-Verbose "$regkeyUser exists: $(Test-Path $regkeyUser)" -verbose:$verbose +Write-Verbose "UseMSDSC Enabled: $($UserUseMSDSC)" -verbose:$verbose -#Save the users PowerShell Session Prompt state -$Global:prompt_old = Get-Content Function:\prompt -$Script:PromptApplianceHostname = "[Not Connected]" - -#Change the PowerShell Prompt -function global:prompt { - - if ($script:HPOneViewLibraryPrompt -eq "Enabled") { - - $cwd = (get-location).Path - - #Display no more than 2 directories deep in the Prompt, otherwise there will be severe prompt wrapping - [array]$cwdt=$() - $cwdi=-1 - do {$cwdi=$cwd.indexofany(“\”,$cwdi+1) ; [array]$cwdt+=$cwdi} until($cwdi -eq -1) - - if ($cwdt.count -gt 3) { - $cwd = $cwd.substring(0,$cwdt[0]) + “..” + $cwd.substring($cwdt[$cwdt.count-3]) - } +#Override Write-Host for MSDSC +if ((Test-Path $regKeyGlobal) -and ($UserUseMSDSC)) { + + function Write-Host { + [CmdletBinding()] + Param( + [Parameter(Mandatory = $true, Position = 0)] + [Object] + $Object, + [Switch] + $NoNewLine, + [ConsoleColor] + $ForegroundColor, + [ConsoleColor] + $BackgroundColor + + ) + + #Override default Write-Host... + Write-Verbose $Object -verbose:$verbose + } - Write-Host '[HPONEVIEW]: ' -ForegroundColor Yellow -NoNewline - if ($global:cimgmtSessionId){ - write-host $script:userName@$Script:PromptApplianceHostname PS $cwd> -NoNewline - } - else{ - write-host $Script:PromptApplianceHostname PS $cwd> -NoNewline - } - return " " + Function Get-Host { + [CmdletBinding()] + Param() - } + Return [PSCustomObject]$Width = @{ UI = @{ RawUI = @{ MaxWindowSize = @{ width = 120 } } } } - else { Invoke-Expression $Global:prompt_old } + } } @@ -23522,7 +23522,7 @@ $ExecutionContext.SessionState.Module.OnRemove = { if ($global:cimgmtSessionId) { Disconnect-HPOVMgmt } #Restore default prompt - Set-Content Function:\prompt $Global:prompt_old + #Set-Content Function:\prompt $Global:prompt_old if ([System.Net.ServicePointManager]::CertificatePolicy) { @@ -23534,3 +23534,4 @@ $ExecutionContext.SessionState.Module.OnRemove = { $script:SSLCheckFlag = $False } + diff --git a/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_HelpInfo.xml b/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_HelpInfo.xml index 79bf576..7698cf9 100644 --- a/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_HelpInfo.xml +++ b/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_HelpInfo.xml @@ -4,7 +4,7 @@ en-US - 1.20.112.9 + 1.20.164.2 \ No newline at end of file diff --git a/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_ModuleInfo.xml b/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_ModuleInfo.xml index 3ae1399..cb2e286 100644 --- a/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_ModuleInfo.xml +++ b/HPOneView.120_9A442AA7-2F4D-4771-9068-8C65EBEFEFC9_ModuleInfo.xml @@ -1,5 +1,5 @@  http://www.hp.com/go/powershell/updatehelp/ - 1.20.112.2 + 1.20.164.0 \ No newline at end of file diff --git a/Samples/ApplianceConfig_Sample.ps1 b/Samples/ApplianceConfig_Sample.ps1 index a157151..68ceb0a 100644 --- a/Samples/ApplianceConfig_Sample.ps1 +++ b/Samples/ApplianceConfig_Sample.ps1 @@ -3,7 +3,7 @@ # - Example scripts for configuring the HP OneView appliance (networking, NTP, # etc.). # -# VERSION 2.0 +# VERSION 2.1 # # (C) Copyright 2015 Hewlett-Packard Development Company, L.P. ############################################################################## @@ -31,9 +31,10 @@ THE SOFTWARE. [CmdletBinding()] param( - [Parameter(Mandatory=$True)] + [Parameter(Position = 0, Mandatory = $True, HelpMessage = "Please provide the Appliances DHCP Address.")] [string]$vm_ipaddr, + [Parameter(Position = 1, Mandatory = $True, HelpMessage = "Please provide the Appliances NEW Static IP Address.")] [String]$IPAddress ) @@ -57,14 +58,13 @@ $ErrorActionPreference = "Stop" if (Get-HPOVEulaStatus -appliance $vm_ipaddr) { Write-Host "Accepting EULA..." - # ret is empty for success? + $ret = Set-HPOVEulaStatus -supportAccess "yes" -appliance $vm_ipaddr } # For initial setup, connect first using "default" Administrator credentials: - Try { Connect-HPOVMgmt -appliance $vm_ipaddr -user "Administrator" -password "admin" } catch [HPOneView.Appliance.PasswordChangeRequired] { @@ -213,7 +213,7 @@ $ErrorActionPreference = "Stop" New-HPOVNetwork -name "3PAR SAN DA A" -type "FibreChannel" -typicalBandwidth 4000 -autoLoginRedistribution $true -fabricType DirectAttach New-HPOVNetwork -name "3PAR SAN DA B" -type "FibreChannel" -typicalBandwidth 4000 -autoLoginRedistribution $true -fabricType DirectAttach - $lig = "HOL Logical Interconnect Group" + $lig = "Logical Interconnect Group 1" $task = New-HPOVLogicalInterconnectGroup -ligName $lig -bays @{1 = "FlexFabric";2 = "FlexFabric"} @@ -230,7 +230,7 @@ $ErrorActionPreference = "Stop" New-HPOVUplinkSet -ligName $lig -Name "3PAR SAN Fabric B" -Type "FibreChannel" -Networks "3PAR SAN DA B" -UplinkPorts "BAY2:X2" $mylig = Get-HPOVLogicalInterconnectGroup -name $lig - New-HPOVEnclosureGroup -name "HOL Enclosure Group" -logicalInterConnectGroup $mylig.uri -interconnectBayMappingCount 8 -stackingMode "Enclosure" + New-HPOVEnclosureGroup -name "Enclosure Group 1" -logicalInterConnectGroup $mylig.uri -interconnectBayMappingCount 8 -stackingMode "Enclosure" Write-host "Sleeping 90sec" start-sleep -Seconds 90 @@ -240,7 +240,7 @@ $ErrorActionPreference = "Stop" username = "3paradm"; password = "3pardata"; hostname = "3par-array.domain.local"; - domain = "CINetworkingLab" + domain = "NODOMAIN" #myArrayPorts = @{ # @@ -255,7 +255,7 @@ $ErrorActionPreference = "Stop" Write-Host "Importing POD storage array: $($params.hostname)" New-HPOVStorageSystem @params | Wait-HPOVTaskComplete - Add-HPOVStoragePool HP-P10000-2 -poolName HPNetworking_R1_FC | Wait-HPOVTaskComplete + Add-HPOVStoragePool HP-P7400-1 -poolName R1_FC_CPG | Wait-HPOVTaskComplete $sht= '{ "type": "server-hardware-type-3", @@ -325,7 +325,7 @@ $ErrorActionPreference = "Stop" Send-HPOVRequest /rest/server-hardware-types POST ($sht | ConvertFrom-Json) - New-HPOVStorageVolume -volumeName "POD$id ESXi Cluster Shared VMFS 1" -StorageSystem "HP-P10000-2" -StoragePool HPNetworking_R1_FC -capacity 500 -shared | Wait-HPOVTaskComplete + New-HPOVStorageVolume -volumeName "POD$id ESXi Cluster Shared VMFS 1" -StorageSystem "HP-P7400-1" -StoragePool R1_FC_CPG -capacity 500 -shared | Wait-HPOVTaskComplete #Create Server Profiles $con1 = New-HPOVProfileConnection -id 1 -type Ethernet -requestedBW 1000 -network "VLAN 1-A" -bootable -priority Primary diff --git a/en-US/HPOneView.120.psm1-help.xml b/en-US/HPOneView.120.psm1-help.xml index 6e0b48b..2b12877 100644 --- a/en-US/HPOneView.120.psm1-help.xml +++ b/en-US/HPOneView.120.psm1-help.xml @@ -2505,7 +2505,7 @@ Clears the alert. Establish a connection with the specified HP OneView appliance. Logs the user into the appliance and establishes a session for use with subsequent requests. Prompts will be displayed for any omitted values. - + Appliance hostname or IP can include an alternate TCP port number. While the appliance does not allow the default TCP port 443 to be changed, the appliance could reside behind a firewall, which is redirecting an alternate TCP port number. @@ -3254,6 +3254,94 @@ Disable local logins on the appliance. + + + + Disable-HPOVMSDSC + + Disable Microsoft DSC Support + + Disable + HPOVMSDSC + + + + Using this cmdlet will create and/or modify UseMSDSC (REG_DWORD) located at HKCU:\Software\Hewlett-Packard\HPOneView, to 0 (False). By disabling support, the module will no longer overload Write-Host. + +Use Enable-HPOVMsDSC to enable support. + + + + + Disable-HPOVMSDSC + + + + + + + None. You cannot pipe objects to this cmdlet. + + + + + + + + + + + + + + + None. + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + + PS C:\> Disable-HPOVMSDSC +Configures Registry value to no longer overload Write-Host. + + + + + + + + + + + + + + + + + + + Enable-HPOVMSDSC + + + + Online: + /~https://github.com/HewlettPackard/POSH-HPOneView/wiki/Disable-HPOVMSDSC + + + @@ -3619,6 +3707,94 @@ Enable local logins on the appliance. + + + + Enable-HPOVMSDSC + + Enable Microsoft DSC Support + + Enable + HPOVMSDSC + + + + Using this cmdlet will create and/or modify UseMSDSC (REG_DWORD) located at HKCU:\Software\Hewlett-Packard\HPOneView, to 1 (True). By enabling support, the module will overload Write-Host, and instead issue Write-Verbose commands. + +Use Disable-HPOVMsDSC to disable support. + + + + + Enable-HPOVMSDSC + + + + + + + None. You cannot pipe objects to this cmdlet. + + + + + + + + + + + + + + + None. + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + + PS C:\> Enable-HPOVMSDSC +Configures Registry value to overload Write-Host, which then uses Write-Verbose. + + + + + + + + + + + + + + + + + + + Disable-HPOVMSDSC + + + + Online: + /~https://github.com/HewlettPackard/POSH-HPOneView/wiki/Enable-HPOVMSDSC + + + @@ -32241,20 +32417,14 @@ Get all Ethernet networks, and add a new Suffix to their names. Set-HPOVPrompt - Modify the HPOneView POSH Prompt. + (Deprecated) Modify the HPOneView POSH Prompt. Set HPOVPrompt - By default, the HP OneView POSH Library will change the prompt to display the following in the prompt: - -[HPONEVIEW] user@appliance PS C:\> - -The first part designates the module is currently loaded into the users PowerShell session. The second part shows which user account is connect to what appliance. - -Using the -Disable switch, the default prompt will not be displayed when the module is loaded for the current user. This setting is configured on a per-user basis. When the prompt is disabled, you an use the Show-HPOVAppliance cmdlet to get the connected to information. + Deprecated in 1.20.0164 Release. Please use Show-HPOVAppliance to see what appliance you are connected to. @@ -35373,7 +35543,7 @@ Retrieve the available MAC Addresses learned in 'VLAN100' network, and export to port - The name of the Logical Interconnect Group to retrieve. + The name of the Interconnect Port ID (i.e. X1 or D5) to retrieve. If no Port ID is provided, all Ports of the Interconnect will be returned. Object @@ -35381,8 +35551,7 @@ Retrieve the available MAC Addresses learned in 'VLAN100' network, and export to interconnect - Aliases [-x, -export] -The full path and file name to export the contents retrieved from the call to Get-HPOVLogicalInterconnectGroup. + The Interconnect resource the Port ID is a member of. Object @@ -35393,7 +35562,7 @@ The full path and file name to export the contents retrieved from the call to Ge port - The name of the Logical Interconnect Group to retrieve. + The name of the Interconnect Port ID (i.e. X1 or D5) to retrieve. If no Port ID is provided, all Ports of the Interconnect will be returned. Object @@ -35404,7 +35573,7 @@ The full path and file name to export the contents retrieved from the call to Ge port - The name of the Logical Interconnect Group to retrieve. + The name of the Interconnect Port ID (i.e. X1 or D5) to retrieve. If no Port ID is provided, all Ports of the Interconnect will be returned. Object @@ -35416,8 +35585,7 @@ The full path and file name to export the contents retrieved from the call to Ge interconnect - Aliases [-x, -export] -The full path and file name to export the contents retrieved from the call to Get-HPOVLogicalInterconnectGroup. + The Interconnect resource the Port ID is a member of. Object @@ -37040,7 +37208,7 @@ when the [System.Net.WebRequest] GetResponse() client generates an [Net.WebExcep to provide the caller with an indication that the appliance is starting its services. This will display two prompts: 1. An initial text-based progress bar while the System.Net.WebRequest is able to access the web service on the appliance to begin polling - for service startup status. + for service startup status. 2. Write-Progress indicator displaying the overall service startup. If any service fails to startup, this function will cause a terminating error, informing the caller to go visit the appliance kiosk diff --git a/en-US/about_HPOneView.120.help.txt b/en-US/about_HPOneView.120.help.txt index f8ec746..c4e29cf 100644 --- a/en-US/about_HPOneView.120.help.txt +++ b/en-US/about_HPOneView.120.help.txt @@ -30,6 +30,18 @@ SHORT DESCRIPTION WHAT'S NEW + Release 1.20.0164.0 + + -- Fixed Show-HPOVSSLCertificate error handling + -- Fixed Connect-HPOVMgmt Error Handling + -- Fixed Update-HPOVStorageSystem where a variable collision would occur reulting in erronuous + error. + -- Removed modifying PowerShell prompt. Set-HPOVPrompt is now deprecated. Please use Show-HPOVAppliance + to see what appliance you are connected to. + -- Added support for Microsoft Desired State Configuration automation with Microsoft System Center + Service Management Automation. Please refer to Enable-HPOVMSDSC for more information. + -- Added Verbose support for PSM1 executed code during Import-Module -verbose. + Release 1.20.0124.0 -- Fixed Show-HPOVLdapGroups where only 1 group would be returned or displayed. -- Fixed New-HPOVLdapServer where the Base64 Certificate wasn't being properly accepted by the @@ -44,7 +56,7 @@ WHAT'S NEW -- Updated New-HPOVUplinkSet to support Object types for NativeEthNetwork parameter. -- Updated Send-HPOVRequest to generate terminating error for HTTP 404 and 500 conditions. -- Updated Connect-HPOVMgmt to generate terminating error for expired passwords. Please update - your script to catch 'HPOneView.Appliance.PasswordChangeRequired' instead of lookging for a return + your script to catch 'HPOneView.Appliance.PasswordChangeRequired' instead of looking for a return HTTP Status Code. -- Updated ApplianceConfig_Sample.ps1 to show how to configure a new appliance. -- Added Get-HPOVRemoteSyslog and Set-HPOVRemoteSyslog cmdlets.