Invoke-Command

From UVOO Tech Wiki
Jump to navigation Jump to search
$regex = "foo"
foreach($line in Get-Content .\hosts.txt) {
    if($line -match $regex){
        write-output $line
        Invoke-Command -ComputerName "$line" -ScriptBlock { hostname }
    }
}
foreach($line in Get-Content .\hosts.txt) {
    write-output $line
    Invoke-Command -ComputerName "$line" -ScriptBlock { sc.exe failure "my service" reset=36000 actions=restart/90000 }
}

https://stackoverflow.com/questions/33511772/read-file-line-by-line-in-powershell

Disk space

invoke-command -scriptblock {Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= { [int]($_.FreeSpace / 1GB) }}} <myhost>

Running command or local script on remote host

curl.exe -L $URL -o C:\tmp\myscript.ps1

$hostname = "myhost"; Invoke-Command -ComputerName $hostname -f C:\tmp\myscript.ps1

Invoke-Command -ComputerName $hostname -ScriptBlock { Get-ChildItem C:\ } -credential $username

Invoke-Command -ComputerName $hostname -f C:\tmp\local-file-on-remote.ps1

Run on array of multiple hosts via foreach

$hostnames = @(
    'host1'
    'host2'
)

foreach ($hostname in $hostnames) {
  Invoke-Command -ComputerName $hostname -ScriptBlock { ipconfig }
}

DNS

$ErrorActionPreference = "Stop"

$rsp = Invoke-Command -ComputerName wjp1-dc -ScriptBlock {
  $zoneName = "example.com"
  $dnsRecords = Get-DnsServerResourceRecord -ZoneName $zoneName -RRType A
  foreach ($record in $dnsRecords) {
    Write-Output "$($record.HostName).$zoneName"
  }
  $dnsRecords = Get-DnsServerResourceRecord -ZoneName $zoneName -RRType CName
  foreach ($record in $dnsRecords) {
    Write-Output "$($record.HostName).$zoneName"
  }
}
write-output "$rsp" > rsp.txt