Forum Discussion

charlie4872's avatar
charlie4872
Brass Contributor
Sep 04, 2020
Solved

Foreach Loop not working

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}
  • 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

2 Replies

  • 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

Resources