0

I have a powershellv2 script for starting services but I can't get it to work propparly I know the start-service command only works localy but I can't seem to get the (gwmi win32_service -computer $comp -Filter "name='$serviceName'").StartService() command to work, I get the following error

You cannot call a method on a null-valued expression. At line:1 char:146 + (Get-WmiObject win32_service -computer cap-test4-biz1 -Credential captest\jola_adm -filter "Name='BTSSvc$BizTalkServerApplication'").invokemethod <<<< ("StartService",$null) + CategoryInfo : InvalidOperation: (invokemethod:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

i have pastet the script below, hopeing some one can help

 $computername = "remoteserver"
    $password = type H:\Powershell\MyPassword.txt | ConvertTo-SecureString
    $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist “domain\user”,$password


    function StartIfStopped([string]$ServiceName) {
        $Service = Get-WmiObject Win32_Service -computername $computername -cred $cred -Filter "name='$ServiceName'"
        if (!$Service) {
            # Service is not installed
            Write-Host "$ServiceName is not installed on this machine."
        } else {
            # Service is installed
            if ($Service.State -eq "Stopped") {
                if ($Service.StartMode -eq "Disabled") {
                    Write-Host "Cannot start service $ServiceName as it is disabled."
                } else {
                    Write-Host "Starting service $ServiceName ..."

                    Start-Service $ServiceName


                }           
            } else {
                Write-Host "$ServiceName is already running."
            }
        }
    }

    StartIfStopped 'BTSSvc$BizTalkServerApplication' 
    StartIfStopped 'BTSSvc$TASMSMQHost'
    StartIfStopped 'BTSSvc$TASProcessingHost'
    StartIfStopped 'BTSSvc$TASSendHost'
    StartIfStopped 'BTSSvc$TASTrackingHost'
1

I think it's the conversion of your password to a SecureString that's doing it. I was able to get your script to work by changing line 2 to this:

$password = type H:\Powershell\MyPassword.txt | ConvertTo-SecureString -AsPlainText -Force

By default ConvertTo-SecureString takes an encrypted string as its input. -AsPlainText tells it to use a plain text string.

Then there's the idea that you're storing a password in a text file....

| improve this answer | |
  • its not that.. i doodled around with the remote log-on and got this. (Get-WmiObject Win32_Service -filter "name='$ServiceName'" -computername $computername -cred $cred ).StartService() – Gabuda Aug 30 '10 at 6:40
0
$computername = Get-Content H:\computers\Computers.txt;
$password = type H:\Powershell\MyPassword.txt | ConvertTo-SecureString
$cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist “domain\user”,$password
$filename = "{0:yyyy-MM-dd} start" -f (Get-Date) 
$tid = Get-Date -f HH:mm:ss



function StartIfStopped([string]$ServiceName) {
    $Service = Get-WmiObject Win32_Service -computername $computername -cred $cred -Filter "name='$ServiceName'"
    if (!$Service) {
        # Service is not installed
        Write-Host "$ServiceName is not installed on $computername."
    } else {
        # Service is installed
        if ($Service.State -eq "Stopped") {
            if ($Service.StartMode -eq "Disabled") {
                Write-Host "Cannot start service $ServiceName as it is disabled." 
            } else {
                #Write-Host "Starting service $ServiceName ..." 
                Write-Output "$tid Starting $ServiceName ." >> H:\logfiler\$filename.txt

                #virker kun lokalt på servere       
                #Start-Service $ServiceName

                #virker på remote servere også i andre domainer 
                (Get-WmiObject Win32_Service -filter "name='$ServiceName'" -computername $computername -cred $cred ).StartService()

            }           
        }  else {
            #Write-Host "$ServiceName is already running."
            Write-Output "$tid already running $ServiceName." >> H:\logfiler\$filename.txt
        }
    }
}

StartIfStopped 'BTSSvc$BizTalkServerApplication'
StartIfStopped 'BTSSvc$TASMSMQHost'
StartIfStopped 'BTSSvc$TASProcessingHost'
StartIfStopped 'BTSSvc$TASSendHost'
StartIfStopped 'BTSSvc$TASTrackingHost'
StartIfStopped 'BRNTService'
StartIfStopped 'TimerService'
StartIfStopped 'BouncedMailTracker'
StartIfStopped 'CMToolService'
StartIfStopped 'CalculationExcelService'
StartIfStopped 'ControlNTService'
StartIfStopped 'EnvelopeService'
StartIfStopped 'PrinterService'

Update on the script, i got it working but now i need it to log-on multiple servers and start the services.

| improve this answer | |
0

I know this question is 6 years old by now but anyway.

Looking at the error message. The problem is the $ in BTSSvc$BizTalkServerApplication and all the other service names with a $. It has to be escaped like so:

Get-WmiObject -ClassName Win32_Service -Filter "Name='BTSSvc`$BizTalkServerApplication'"
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.