Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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'
share|improve this question

2 Answers 2

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....

share|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
$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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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