Reputation: 2309
I have powershell script that reads output from powershell command line and saves it into a hash.
When I try to get "sender-ip", the output is blank.
Below is the code
$args = (($args | % { $_ -join ", " }) -join " ")
foreach ($i in $args){
$line_array+= $i.split(",")
}
foreach ($j in $line_array){
$multi_array += ,@($j.split("="))
}
foreach ($k in $multi_array){
$my_hash.add($k[0],$k[1])
write-host $k
}
$Sender_IP = $my_hash.Get_Item("sender-ip")
Write-host 'sender-ip is' $Sender_IP
Here are the arguments passed into the script
script.ps1 Manager Last Name=Doe, discover-location=null, protocol=Clipboard, Resolution=null, file-owner=user, Employee Type=External Employee, endpoint-file-path=null, Title=null, discover-extraction-date=null, Sender-IP=10.10.10.10, Manager Business Unit=IT Services, Manager Phone=414-555-5555, Username=user, Division=Contractor, file-created-by=DOMAIN\user, file-owner-domain=DOMAIN
And this is the output
Manager Last Name Doe
discover-location null
protocol Clipboard
Resolution null
file-owner user
Employee Type External Employee
endpoint-file-path null
Title null
discover-extraction-date null
Sender-IP 10.10.10.10
Manager Business Unit IT Services
Manager Phone 414-555-5555
Username user
Division Contractor
file-created-by DOMAIN\user
file-owner-domain DOMAIN
sender-ip is
The code seems correct, what is missing?
Upvotes: 0
Views: 143
Reputation: 16596
If you output the $my_hash.Keys
property...
file-created-by
discover-extraction-date
Manager Phone
Employee Type
endpoint-file-path
file-owner-domain
Title
Manager Business Unit
discover-location
Sender-IP
Username
file-owner
Resolution
Manager Last Name
Division
protocol
...you'll see that, due to the way you're parsing the command line arguments, all but one of the keys is prefixed with a space character. The value you're looking for actually has key " Sender-IP"
; there is no item with key "Sender-IP"
in $my_hash
.
To remove leading and trailing whitespace from all keys and values, you can use the String.Trim
instance method in your last foreach
loop like this...
foreach ($k in $multi_array) {
$key = $k[0].Trim()
$value = $k[1].Trim()
$my_hash.add($key, $value)
write-host $key $value
}
Upvotes: 1