Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.
If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!
PSEnsure using Map Expression (Hash Table)
-
Hello,
I am using a PSensure to collect the information. I have a map expression configured on the server variable as to to check for disk labels:
%DiskLabel %(C: OSDisk, D: DataDisk1)And this runs in a role to collect for each server it is assigned to:
##AH:UseTextMode## Ensure Disk Label configuration PSEnsure ( Key: Disk Label Check, Value: True, Collect: >> $ServerVariable = $DiskLabel $Disks = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" $ServerVariable.GetEnumerator() |ForEach-Object { if ( ($Disks.DeviceID).Replace(':','') -contains ("$($_.Key)")) { $y = $disks | Where-Object -Property DeviceID -match $_.Key; $y.VolumeName -eq $($_.Value) }} >>, Configure: >> write-output "The fix is in" >> );But when it collects, even though the values are both true, it reports as drift. Ideas?
Product: Otter
Version: 2.0.10 -
What is the output of your log?
I think this will always report drift, because in all cases your Collect script will return an array of unknown length (number od drives), where as your Value is always a scalar (true).
-
The output is the following:
ServerCheckout_DiskLabelCheck
Ensure $ServerVariable = $DiskLabel $Disks = Get-WmiObject -Class Win3 using PowerShell
DEBUG: Collecting configuration...
DEBUG: Importing DiskLabel...
DEBUG: Comparing configuration...
DEBUG: Difference: Value
DEBUG: =Template=> True
DEBUG: = Actual => True, True
INFO: Configuration drift detected.
DEBUG: Adding to execution plan. -
Yes, you can see that the values aren't the same, so there's drift. "True" is not "True, True".
You'll need to change your PS to only return a scalar/Boolean (i.e. "True"), not an array of values.
-
Since I wanted all of my values in the array to be true to have success in my PSEnsure I thought of different ways I could do this. I settled on counting the items in the array, and using the fact that $true -eq 1 and $false -eq 0 to build a value that should match the count. I added this to the end:
$array.ForEach({if ($) {$val += $}})
$array.Count -eq $val
Thanks for your help!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login