SOLVED

Foreach Loop not working

Brass Contributor

Hello I am trying to get a foreach loop to work but when I run the script the way it is in the below example it only runs against my local computer and not against the computers in computers.txt. Not sure what I am doing wrong. Any help is appreciated!!

 

$computers = get-content "C:\scripts\Bitlocker\computers.txt"
foreach ($computer in $computers) {
Enable-Bitlocker -MountPoint c: -UsedSpaceOnly -SkipHardwareTest -RecoveryPasswordProtector 
$RecoveryKeyGUID = (Get-BitLockerVolume -MountPoint $env:SystemDrive).keyprotector | where {$_.Keyprotectortype -eq 'RecoveryPassword'} | Select-Object -ExpandProperty KeyProtectorID |manage-bde.exe  -protectors $env:SystemDrive -adbackup -id $RecoveryKeyGUID}
2 Replies
best response confirmed by charlie4872 (Brass Contributor)
Solution
Hey Charlie4872,
Seems like you are not using $computer variable, so every time it runs the command it runs for your local computer only.
Have you tried using Invoke-Command with -scriptblock. In your case it will be something like below:-

$computers = get-content "C:\scripts\Bitlocker\computers.txt"
foreach ($computer in $computers) {
Invoke-Command -ComputerName $computer -ScriptBlock {Enable-Bitlocker -MountPoint c: -UsedSpaceOnly -SkipHardwareTest -RecoveryPasswordProtector }
Invoke-Command -ComputerName $computer -ScriptBlock {$RecoveryKeyGUID = (Get-BitLockerVolume -MountPoint $env:SystemDrive).keyprotector | where {$_.Keyprotectortype -eq 'RecoveryPassword'} | Select-Object -ExpandProperty KeyProtectorID |manage-bde.exe -protectors $env:SystemDrive -adbackup -id $RecoveryKeyGUID}}

Assuming that you are running 2 different cmdlets.

Thanks

Thanks for the reply @DeepakRandhawa That was the issue. Working perfectly now.

 

Thanks!

1 best response

Accepted Solutions
best response confirmed by charlie4872 (Brass Contributor)
Solution
Hey Charlie4872,
Seems like you are not using $computer variable, so every time it runs the command it runs for your local computer only.
Have you tried using Invoke-Command with -scriptblock. In your case it will be something like below:-

$computers = get-content "C:\scripts\Bitlocker\computers.txt"
foreach ($computer in $computers) {
Invoke-Command -ComputerName $computer -ScriptBlock {Enable-Bitlocker -MountPoint c: -UsedSpaceOnly -SkipHardwareTest -RecoveryPasswordProtector }
Invoke-Command -ComputerName $computer -ScriptBlock {$RecoveryKeyGUID = (Get-BitLockerVolume -MountPoint $env:SystemDrive).keyprotector | where {$_.Keyprotectortype -eq 'RecoveryPassword'} | Select-Object -ExpandProperty KeyProtectorID |manage-bde.exe -protectors $env:SystemDrive -adbackup -id $RecoveryKeyGUID}}

Assuming that you are running 2 different cmdlets.

Thanks

View solution in original post