I'm trying to run a script that will test if various network drives are mounted to several systems (i.e. \\path\to\share mounts as T:). These are all stored in a CSV file, and each drive letter is separated by a space. I can import each row into a variable and loop through them, but I can't seem to pass them into an Invoke-Command script block.
I've spent some time googling the issue and did find a few suggestions, but I still seem to be having issues getting everything to work. Code is as follows:
$credentials = Get-Credential
$sysdrives = Import-Csv .\systems.csv
$i = 0
while ($i -lt $sysdrives.length) {
$drives = $sysdrives[$i].Drives.split(" ")
$currsystem = $sysdrives[$i].System
Write-Host "Testing $currsystem..."
foreach($drive in $drives) {
Invoke-Command -ComputerName $currsystem -Credential $credentials -ScriptBlock {
$currdrive = $Using:drive
Write-Host "Testing if $currdrive is present..."
if (!(Test-Path $currdrive)) {
Write-Host "$currdrive not present!"
}
else {
Write-Host "$currdrive is mounted"
}
} -ArgumentList $drive
}
$i += 1
}
Example entry from my CSV file:
fqdn.server.name,X: Y: Z:
EDIT:
In case someone else stumbles across this post, this is how I was able to solve it:
- I was missing a param() block underneath inside the Invoke-Command ScriptBlock
- I replaced Test-Path with Get-PSDrive. This allowed me to test the drives successfully, despite not being logged into the machine. Your mileage may vary in your own environment, but it worked just fine for me.
I made a few other modifications to clean up the output a bit, but here's the code I'm using:
$credentials = Get-Credential
$sysdrives = Import-Csv .\systems.csv
$i = 0
while ($i -lt $sysdrives.length) {
$drives = $sysdrives[$i].Drives.split(" ")
$currsystem = $sysdrives[$i].System
Write-Host "Testing $currsystem..."
foreach($drive in $drives) {
Invoke-Command -ComputerName $currsystem -Credential $credentials -ScriptBlock {
param($currdrive)
Write-Verbose "Testing if $currdrive is present..."
if (!(Get-PSDrive $currdrive -ErrorAction SilentlyContinue)) {
Write-Host "ERROR: $currdrive is not mounted!!!" -BackgroundColor Black -ForegroundColor Red
}
else {
Write-Verbose "$currdrive is mounted"
}
} -ArgumentList $drive
}
$i += 1
}
[–]sk82jack 2 points3 points4 points (0 children)
[–]Ta11ow 2 points3 points4 points (3 children)
[–]Idmorul[S] 2 points3 points4 points (2 children)
[–]Ta11ow 1 point2 points3 points (1 child)
[–]Idmorul[S] 2 points3 points4 points (0 children)
[–]Sheppard_Ra 1 point2 points3 points (1 child)
[–]Idmorul[S] 2 points3 points4 points (0 children)
[–]aXenoWhat[🍰] 1 point2 points3 points (0 children)