powershell.ps1: Add str, int, float types and ignore $null values (#21377)

* powershell.ps1: Add str type and ignore $null values

Changes include:
- New "str" type support using -type "str"
- Ensure that $null values are retained (for bool and str types)
  (Note: $null means unspecified value for parameters)
- Some minor cosmetic changes

* Also add -type "int" and -type "float"

No modules require this at the moment though.
pull/21146/head
Dag Wieers 8 years ago committed by Matt Davis
parent 371f9fa90d
commit f47901c3ad

@ -130,9 +130,15 @@ Function Add-DeprecationWarning($obj, $message, $version = $null)
}
}
# Helper function to expand environment variables in values. By default
# it turns any type to a string, but we ensure $null remains $null.
Function Expand-Environment($value)
{
if ($value -ne $null) {
[System.Environment]::ExpandEnvironmentVariables($value)
} else {
$value
}
}
# Helper function to get an "attribute" from a psobject instance in powershell.
@ -192,12 +198,22 @@ Function Get-AnsibleParam($obj, $name, $default = $null, $resultobj = @{}, $fail
}
# If $value -eq $null, the parameter was unspecified
if ($value -ne $null -and $type -eq "path") {
# Expand environment variables on path-type (Beware: turns $null into "")
# Expand environment variables on path-type
$value = Expand-Environment($value)
} elseif ($type -eq "bool") {
} elseif ($value -ne $null -and $type -eq "str") {
# Convert str types to real Powershell strings
$value = $value.ToString()
} elseif ($value -ne $null -and $type -eq "bool") {
# Convert boolean types to real Powershell booleans
$value = $value | ConvertTo-Bool
} elseif ($value -ne $null -and $type -eq "int") {
# Convert int types to real Powershell integers
$value = $value -as [int]
} elseif ($value -ne $null -and $type -eq "float") {
# Convert float types to real Powershell floats
$value = $value -as [float]
}
return $value
@ -261,7 +277,7 @@ Function Parse-Args($arguments, $supports_check_mode = $false)
# and above can handle:
Function Get-FileChecksum($path, $algorithm = 'sha1')
{
If (Test-Path -PathType Leaf $path)
If (Test-Path -Path $path -PathType Leaf)
{
switch ($algorithm)
{
@ -270,7 +286,7 @@ Function Get-FileChecksum($path, $algorithm = 'sha1')
'sha256' { $sp = New-Object -TypeName System.Security.Cryptography.SHA256CryptoServiceProvider }
'sha384' { $sp = New-Object -TypeName System.Security.Cryptography.SHA384CryptoServiceProvider }
'sha512' { $sp = New-Object -TypeName System.Security.Cryptography.SHA512CryptoServiceProvider }
default { Fail-Json (New-Object PSObject) "Unsupported hash algorithm supplied '$algorithm'" }
default { Fail-Json @{} "Unsupported hash algorithm supplied '$algorithm'" }
}
If ($PSVersionTable.PSVersion.Major -ge 4) {
@ -282,7 +298,7 @@ Function Get-FileChecksum($path, $algorithm = 'sha1')
$fp.Dispose();
}
}
ElseIf (Test-Path -PathType Container $path)
ElseIf (Test-Path -Path $path -PathType Container)
{
$hash = "3";
}

Loading…
Cancel
Save