title: Powershell Remote Stop and Disable Service
body: <p>SO Braintrust.  I'm not a Powershell person, but I'm working on it.  Trying to address yet another zero-day, I'm trying to build a reuseable script to remotely stop and disable the affected service.  It is based on a script I got from a Microsoft MVP at (ultimately):  <a href="http://portal.sivarajan.com/2010/07/stopstart-or-enabledisable-service_26.html" rel="nofollow noreferrer">http://portal.sivarajan.com/2010/07/stopstart-or-enabledisable-service_26.html</a></p>
  
  <p>The prompt for the service name was added by me as well as the output information (Write-host &amp; Add-Content lines), so I could get a results summation (the output part's not working fully, but it's the least of my concerns at the moment.).</p>
  
  <pre><code>$output = "c:\scripts\results.csv"
  Add-content -path $output "======================"
  Add-content -path $output "StopAndDisableService Output Start"
  cls
  $Cred = Get-Credential
  $service = Read-Host -Prompt 'Enter Service Name" '
  Import-CSV C:\Scripts\computers.csv | % 
  { 
     $computer = $_.ComputerName
     Write-Host "Working on $computer"
     Add-content -path $output "$computer"
     $result = (Get-WmiObject win32_service -computername $computer -filter "name='$service'" -Credential $cred).stopservice()
     Add-content -path $output "    Stop - $result"
     $result = (Get-WmiObject win32_service -computername $computer -filter "name='$service'" -Credential $cred).ChangeStartMode("Disabled")
     Add-content -path $output "    Disable - $result"
  } 
  Add-content -path $output "======================"
  Add-content -path $output "StopAndDisableService Output End"
  </code></pre>
  
  <p>when I run it, I get an error on the computer name</p>
  
  <blockquote>
    <p>Get-WmiObject : Cannot validate argument on parameter 'ComputerName'.
    The argument is null or empty. Provide an argument that is not null or empty, and then try the command again. 
    At C:\Scripts\StopAndDisableService.ps1:12 char:54
    + ... result = (Get-WmiObject win32_service -computername $computer -filter ...
    +                                                         ~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Get-WmiObject], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetWmiObjectCommand
    Get-WmiObject : Cannot validate argument on parameter 'ComputerName'.  The argument is null or empty. Provide an argument that is not null or empty, and then try the command again. 
    At C:\Scripts\StopAndDisableService.ps1:14 char:54
    + ... result = (Get-WmiObject win32_service -computername $computer -filter ...
    +                                                         ~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Get-WmiObject], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetWmiObjectCommand</p>
  </blockquote>
  
  <p>Computer.csv contains one computer name per line, no punctuation, no FQDN, just the computer name</p>