Hi I have two file PID and HID which contain list of equal numbers of HIDs and PIDs. I want these HID and PID in file to pass to a command recursively. here’s what i have done.
$PID = get-content pid.txt
$HID = get-content hid.txt
foreach ( ) {
#i want to give each value in pid and hid to following command
handle.exe -c $HID -p $PID
}
#but it don’t work because i don’t know what condition to give in foreach loop. Please help
I’m new and not a powershell pro but -
Instead of a foreach, I would use a for loop (it is also faster this way). Example below
#Create array one
$a = @("1", "2", "3")
#create array two
$b = @("4", "5", "6")
#starting with the first element of each array (0)
#write the values out to the console
#This will work for any size array because the last
#element of the array is always (count -1) because of 0 based indexing
for ($i = 0 ; $i -lt $a.count; $i++)
{
write-host $a[$i] "and" $b[$i]
}
I should note, this only works if the values you want together are in the same index of the 2 arrays.
I.E. $pid[0] and $hid[0] go together.
Get-Content will generate an array of lines, so the loop needs to get lines based on index. So, something like this should work:
$PID = get-content pid.txt
$HID = get-content hid.txt
for ( $i = 0;$i -le ($PID.Count - 1);$i++ ) {
"Processing hid {0} and pid {1}" -f $HID[$i],$PID[$i]
handle.exe -c $HID[$i] -p $PID[$i]
}
Now, I will say that is a very disjointed method trying to line up content based on index as there are several assumptions. A more Powershell approach is leveraging a PSObject, something like this:
$myobject = @()
$myobject += @{Pid = 123;Hid = 321}
$myobject += @{Pid = 325;Hid = 427}
foreach ($obj in $myobject) {
"Processing hid {0} and pid {1}" -f $obj.hid,$obj.pid
handle.exe -c $obj.hid -p $obj.pid
}
Depending on where you get the PID\HID data, it may be easier to do that rather than generate files. There are several folks that have examples:
https://stackoverflow.com/questions/958123/powershell-script-to-check-an-application-thats-locking-a-file
@crisovan Really close, just one tip, make sure that you subtract 1 from your count if your are referencing an index. Count starts at 1, indexing starts at 0, so if the count was 4 the indexing would end at 3.
Rob,
If the count of the array is 4 and my for loop uses -lt (not -le) my loop should stop at 3.
-mike