Сценарий Powershell из планировщика задач Windows 10 не запускается Chrome - PullRequest
0 голосов
/ 16 января 2020

Я сделал небольшой скрипт Powershell 'Start.ps1', который запускает некоторые сайты при Windows запуске. Когда я запускаю его вручную, все настроенные веб-сайты запускаются в Chrome. Однако, когда я запускаю его с помощью планировщика задач, задача запускается, но Chrome не запускается.

schtasks /create /tn "Start" /sc onstart /delay 0000:30 /rl highest /ru system /tr "powershell.exe -file 'C:\Users\myuser\Google Drive\Home\Start.ps1'"

Я также добавил несколько журналов в свой сценарий powershell, поэтому я уверен, что сценарий имеет началось:

Function Write-Log {
  Param (
    [parameter(Mandatory=$True,HelpMessage='Log output')][string]$Log,
    [parameter(Mandatory=$True,HelpMessage='Log severity')][ValidateSet('Debug', 'Info', 'Warning', 'Error', 'Unknown')][string]$Severity,
    [parameter(Mandatory=$True,HelpMessage='Log message')][string]$Message
  )
  $Now = Get-Date -Format 'yyyy-MM-dd HH:mm:ss,fff'
  $LocalScriptName = Split-Path -Path $myInvocation.ScriptName -Leaf
  If ( $Log -eq 'Verbose' ) {
    Write-Verbose -Message ('{0}: {1}: {2}: {3}' -f $Now, $LocalScriptName, $Severity, $Message)
  }
  ElseIf ( $Log -eq 'Debug' ) {
    Write-Debug -Message ('{0}: {1}: {2}: {3}' -f $Now, $LocalScriptName, $Severity, $Message)
  }
  ElseIf ( $Log -eq 'Output' ) {
    Write-Verbose -Message ('{0}: {1}: {2}: {3}' -f $Now, $LocalScriptName, $Severity, $Message)
  }
  ElseIf ( $Log -match '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])(?::(?<port>\d+))$' -or $Log -match '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' ) {
    $IpOrHost = $log.Split(':')[0]
    $Port = $log.Split(':')[1]
    If ( $IpOrHost -match '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' ) {
      $Ip = $IpOrHost
    }
    Else {
      $Ip = [Net.Dns]::GetHostAddresses($IpOrHost)[0].IPAddressToString
    }
    Try {
      $LocalHostname = ([Net.Dns]::GetHostByName((& "$env:windir\system32\hostname.exe")).HostName).tolower()
      $JsonObject = (New-Object -TypeName PSObject | 
        Add-Member -PassThru -NotePropertyName NoteProperty -NotePropertyValue logsource -InputObject $LocalHostname | 
        Add-Member -PassThru -NotePropertyName NoteProperty -NotePropertyValue hostname -InputObject $LocalHostname | 
        Add-Member -PassThru -NotePropertyName NoteProperty -NotePropertyValue scriptname -InputObject $LocalScriptName | 
        Add-Member -PassThru -NotePropertyName NoteProperty -NotePropertyValue logtime -InputObject $Now | 
        Add-Member -PassThru -NotePropertyName NoteProperty -NotePropertyValue severity_label -InputObject $Severity | 
      Add-Member -PassThru -NotePropertyName NoteProperty -NotePropertyValue message -InputObject $Message ) 
      If ( $psversiontable.psversion.major -ge 3 ) {
        $JsonString = $JsonObject | ConvertTo-Json
        $JsonString = $JsonString -replace "`n",' ' -replace "`r",' '
      }
      Else {
        $JsonString = $JsonObject | ConvertTo-Json2
      }               
      $Socket = New-Object -TypeName System.Net.Sockets.TCPClient -ArgumentList ($Ip,$Port) 
      $Stream = $Socket.GetStream() 
      $Writer = New-Object -TypeName System.IO.StreamWriter -ArgumentList ($Stream)
      $Writer.WriteLine($JsonString)
      $Writer.Flush()
      $Stream.Close()
      $Socket.Close()
    }
    Catch {
      Write-Verbose -Message ("{0}: {1}: Error: Something went wrong while trying to send message to logserver `"{2}`"." -f $Now, $LocalScriptName, $Log)
    }
    Write-Verbose -Message ('{0}: {1}: {2}: Ip: {3} Port: {4} JsonString: {5}' -f $Now, $LocalScriptName, $Severity, $Ip, $Port, $JsonString)
  }
  ElseIf ($Log -match '^((([a-zA-Z]:)|(\\{2}\w+)|(\\{2}(?:(?:25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)(?(?=\.?\d)\.)){4}))(\\(\w[\w ]*))*)') {
    If (Test-Path -Path $Log -pathType container){
      Write-Host ('{0}: {1}: Error: Passed Path is a directory. Please provide a file.' -f $Now, $LocalScriptName)
      Exit 1
    }
    ElseIf (!(Test-Path -Path $Log)) {
      Try {
        $Null = New-Item -Path $Log -ItemType file -Force   
      } 
      Catch { 
        $Now = Get-Date -Format 'yyyy-MM-dd HH:mm:ss,fff'
        Write-Host ("{0}: {1}: Error: Write-Log was unable to find or create the path `"{2}`". Please debug.." -f $Now, $LocalScriptName, $Log)
        exit 1
      }
    }
    Try {
      ('{0}: {1}: {2}: {3}' -f $Now, $LocalScriptName, $Severity, $Message) | Out-File -filepath $Log -Append   
    }
    Catch {
      Write-Host ("{0}: {1}: Error: Something went wrong while writing to file `"{2}`". It might be locked." -f $Now, $LocalScriptName, $Log)
    }
  }
}

$Logfile="c:\Tempo\Start.log"
Write-Log $Logfile Info "Initiating Chrome Site Startup"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -ArgumentList "https://outsideit.net"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -ArgumentList "https://psychologischezorgopmaat.be"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -ArgumentList "https://github.com"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -ArgumentList "https://gitlab.com"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -ArgumentList "http://localhost:9200"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -ArgumentList "http://localhost:5601"
Write-Log $Logfile Info "Finalizing Chrome Site Startup"

Как я могу сделать эту работу в планировщике заданий? Я попытался запустить его с SYSTEM и моим собственным пользователем, а также с опцией «Запуск с наивысшими привилегиями».

1 Ответ

1 голос
/ 16 января 2020

Всегда проверяйте, работает ли запланированная задача, как задумано, когда вы запускаете ее вручную (Scheduled Tasks - щелкните правой кнопкой мыши вашу задачу и Run ее). Когда это сработает, перейдите к проверке, работает ли он должным образом при запуске компьютера (или в любое время, в зависимости от триггера).

Когда я импортировал вашу задачу с помощью команды cmd с учетной записью пользователя SYSTEM значение по умолчанию было « Запустить независимо от того, вошел ли пользователь в систему или нет ». Если бы я попытался запустить его вручную, скрипт не запустился бы. Затем я изменил пользователя на свою учетную запись, изменил опцию на « Запускать только когда пользователь вошел в систему », и это решило проблему для меня (также много раз и раньше). Мне не удалось изменить эту опцию при использовании пользователя SYSTEM.

scheduled task settings

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...