Я пытаюсь сделать New-ScheduledJob
для запуска сценария PowerShell, который проверяет приложение и выдает графический интерфейс с уведомлением, когда пользователь входит в систему, если находит приложение.Это работало нормально при использовании New-ScheduledTask
, но у меня возникли проблемы с тем, чтобы New-ScheduledJob
функционировал таким же образом.В частности, с битом учетных данных и проверкой отсутствия запроса пароля при запуске сценария, вот как я это сделал, используя New-ScheduledTask
командлет.
Конкретные проблемы, с которыми я сталкиваюсь:
- Я смог запустить задачу с приведенным ниже кодом в качестве учетной записи службы и не нашел способа сделать это с помощью командлет запланированных заданий.
- , когда я создаю новую запланированную работу с помощью выполняемого сценария.не высовывать форму, которая должна.Я считаю, что он работает в фоновом режиме, но не знаю, как это исправить.
Сначала я включу рабочий сценарий, который использовался с командлетом schedulenewtask, а затем новый сценарий, которым я занимался до сих пор.неудачно с.
$A = New-ScheduledTaskAction -Execute "office_check_funct_test.ps1" -WorkingDirectory "C:\Users\user\Desktop\notify"
$T = New-ScheduledTaskTrigger -AtLogOn
$S = New-ScheduledTaskSettingsSet -StartWhenAvailable
$P = New-ScheduledTaskPrincipal -UserId "LOCALSERVICE" -LogonType ServiceAccount
$D = New-ScheduledTask -Principal $P -Action $A -Trigger $T -Settings $S
function Check_Program_Installed($programName) {
$x86_check = ((Get-ChildItem "C:\Program Files (x86)\Microsoft Office") |
Where-Object { $_."Name" -like "*$programName*" }).Length -gt 0;
if (Test-Path 'C:\Program Files (x86)\Microsoft Office') {
$x64_check = ((Get-ChildItem "C:\Program Files (x86)\Microsoft Office") |
Where-Object { $_."Name" -like "*$programName*" }).Length -gt 0;
}
return $x86_check -or $x64_check;
}
$check = Check_Program_Installed("Office12")
if ($check -eq $false) {
try {
Register-ScheduledTask -InputObject $D -TaskName T1 -ErrorAction SilentlyContinue
} catch {
}
Enable-ScheduledTask -TaskName T1 -ErrorAction SilentlyContinue
Add-Type -AssemblyName System.Windows.Forms
$config = '.\config.txt'
$values = Get-Content $config | Out-String | ConvertFrom-StringData
$values.textAlign
# hashtable, hence this variable
$values1 = Get-Content $config
$values1[3]
$res = (Get-WmiObject -Class Win32_VideoController).VideoModeDescription -split " x "
$displayWidth = $res[0]
$displayHeight = $res[1]
$formWidth = $values.formWidth
$formHeight = $values.formHeight
$bufferWidth = $values.bufferWidth
$bufferHeight = $values.bufferHeight
$locX = $displayWidth - $formWidth - $bufferWidth
$locY = $displayHeight - $formHeight - $bufferHeight
$image = [system.Drawing.Image]::FromFile('.\logo.png')
$form = New-Object System.Windows.Forms.Form
$form.StartPosition = 'Manual'
$form.ClientSize = "$($formWidth),$($formHeight)"
$form.Location = "$($locX),$($locY)"
$form.FormBorderStyle = 'FixedDialog'
$form.MinimizeBox = $false
$form.MaximizeBox = $false
$form.BackgroundImage = $image
$form.BackgroundImageLayout = 'None'
$form.BackColor = $values.formBackColor
$form.Opacity = $values.formOpacity
$button1 = New-Object System.Windows.Forms.Button
$button1.Visible = $true
$button1Width = $values.button1Width
$button1Height = $values.button1Height
$button1.DialogResult = 'OK'
$button1.Size = "$($button1Width),$($button1Height)"
$button1.Font = $values.buttonFont
$button1.Text = $values.buttonText
$buttonLocX = $values.buttonLocX
$buttonLocY = $values.buttonLocY
$button1.Location = "$($buttonLocX),$($buttonLocY)"
$button1.BackColor = $values.buttonBackColor
$button1.ForeColor = $values.buttonForeColor
$text = Get-Content -PSPath '.\message.txt'
$lableLocX = $values.textBoxLocX
$lableLocY = $values.textBoxLocY
$label2 = New-Object System.Windows.Forms.Label
$label2.Text = $text
$label2.Font = $values.font
$label2.Size = $values.textBoxSize
$label2.Location = "$($lableLocX),$($lableLocY)"
$label2.BackColor = $values.textBoxBackColor
$label2.ForeColor = $values.textColor
$label2.TextAlign = $values1[3] -split 'textAlign= ' | Out-String
$Icon = [system.drawing.icon]::ExtractAssociatedIcon(".\star_logo.ico")
$form.Icon = $Icon
$form.Controls.AddRange(@($button1, $label2))
[void]$form.ShowDialog()
} elseif ($check -eq $true) {
Disable-ScheduledTask -TaskName T1
}
function Check_Program_Installed($programName) {
$x86_check = ((Get-ChildItem -ErrorAction SilentlyContinue "C:\Program Files (x86)\Microsoft Office\Office12") |
Where-Object { $_."Name" -like "*$programName*" }).Length -gt 0;
if (Test-Path -ErrorAction SilentlyContinue 'C:\Program Files (x86)\Microsoft Office\Office12') {
$x64_check = ((Get-ChildItem -ErrorAction SilentlyContinue "C:\Program Files (x86)\Microsoft Office\Office12") |
Where-Object -ErrorAction SilentlyContinue { $_."Name" -like "*$programName*" }).Length -gt 0;
}
return $x86_check -or $x64_check;
}
$check = Check_Program_Installed("excel")
if ($check -eq $false) {
try {
$S = New-ScheduledJobOption -RunElevated -ContinueIfGoingOnBattery
$logon = New-JobTrigger -AtLogOn
$account = New-Object System.Management.Automation.PSCredential "domain/user"
Register-ScheduledJob -ErrorAction SilentlyContinue -FilePath C:\doucments\scripts\test_job.ps1 -argument form -Name TestJob4 -ScheduledJobOption $S -Trigger $logon -Credential $account
} catch {
}
try {
Enable-ScheduledJob -ErrorAction SilentlyContinue -Name TestJob1
} catch {
}
Add-Type -AssemblyName System.Windows.Forms
$config = '.\config.txt'
$values = Get-Content $config | Out-String | ConvertFrom-StringData
$values.textAlign
$values1 = Get-Content $config
$values1[3]
$res = (Get-WmiObject -Class Win32_VideoController).VideoModeDescription -split " x "
$displayWidth = $res[0]
$displayHeight = $res[1]
$formWidth = $values.formWidth
$formHeight = $values.formHeight
$bufferWidth = $values.bufferWidth
$bufferHeight = $values.bufferHeight
$locX = $displayWidth - $formWidth - $bufferWidth
$locY = $displayHeight - $formHeight - $bufferHeight
$image = [system.Drawing.Image]::FromFile('.\logo.png')
$form = New-Object System.Windows.Forms.Form
$form.StartPosition = 'Manual'
$form.ClientSize = "$($formWidth),$($formHeight)"
$form.Location = "$($locX),$($locY)"
$form.FormBorderStyle = 'FixedDialog'
$form.MinimizeBox = $false
$form.MaximizeBox = $false
$form.BackgroundImage = $image
$form.BackgroundImageLayout = 'None'
$form.BackColor = $values.formBackColor
$form.Opacity = $values.formOpacity
$button1 = New-Object System.Windows.Forms.Button
$button1.Visible = $true
$button1Width = $values.button1Width
$button1Height = $values.button1Height
$button1.DialogResult = 'OK'
$button1.Size = "$($button1Width),$($button1Height)"
$button1.Font = $values.buttonFont
$button1.Text = $values.buttonText
$buttonLocX = $values.buttonLocX
$buttonLocY = $values.buttonLocY
$button1.Location = "$($buttonLocX),$($buttonLocY)"
$button1.BackColor = $values.buttonBackColor
$button1.ForeColor = $values.buttonForeColor
$text = Get-Content -PSPath '.\message.txt'
$lableLocX = $values.textBoxLocX
$lableLocY = $values.textBoxLocY
$label2 = New-Object System.Windows.Forms.Label
$label2.Text = $text
$label2.Font = $values.font
$label2.Size = $values.textBoxSize
$label2.Location = "$($lableLocX),$($lableLocY)"
$label2.BackColor = $values.textBoxBackColor
$label2.ForeColor = $values.textColor
$label2.TextAlign = $values1[3] -split 'textAlign= ' | Out-String
$Icon = [system.drawing.icon]::ExtractAssociatedIcon(".\star_logo.ico")
$form.Icon = $Icon
$form.Controls.AddRange(@($button1, $label2))
[void]$form.ShowDialog()
} elseif ($check -eq $true) {
Disable-ScheduledJob -Name TestJob3
}