web-dev-qa-db-ja.com

PowerShellのスケジュールされたタスクのプロパティ?

PowerShellでこれを行う方法はわかりませんが、サポートされているとは思いません。

例えば:

$tasks = schtasks /query 

すべてのタスクを変数$tasksに格納します

出力例:

Folder: \Microsoft\Windows\WindowsBackup
TaskName                                 Next Run Time          Status
======================================== ====================== ===============
ConfigNotification                       Disabled

プロパティ「TaskName」は簡単には参照できません(つまり、$tasks.TaskName

Get-serviceコマンドレットでプロパティを参照する方法のように、$tasks変数内のTaskNameプロパティを参照する他の方法はありますか?

$services = gsv
$services | Where-Object { Write-Output $_.Name }
3
nulz

schtasks/ foパラメーターを使用して出力をCSVとして出力し、ConvertFrom-CSVコマンドを使用して出力をPowershellオブジェクトに変換します。

$tasks = schtasks /query /fo CSV | ConvertFrom-CSV

次に、次のように特定のタスク名の検索を使用できます

$myTask = $tasks | Where-Object {$_.TaskName -eq "My_Scheduled_Task"}
5
Adam Prax

私はタスクスケジューラのような自動化ツールである VisualCron を使用しています。 Powershellを実行するための特定のタスクがあります。 2つのモードがあります。VisualCronにPSコードを入力できるインプロセスと、既存のPSファイルにリンクすることもできます。

どちらの方法でも、VisualCronに組み込まれている変数を使用して、Powershellスクリプトに情報を直接渡すことができます。

0
Henrik

Powershell/pwshでは、代わりにGet-ScheduledTask [ ref ]またはGet-ScheduledTaskInfoを使用します。

0
Atiq Rahman

必要なことを行うには、カスタムオブジェクトを作成し、schtasks出力からの詳細をオブジェクトに入力する必要があります。これにより、探していることを実行できるようになります。私はしばらく前にこのために仕事でプロジェクトをしました。私は日曜日にそのコードにアクセスし、それを投稿します。

これが私が作成したスケジュールされたタスククエリスクリプトです。これは私の最初のスクリプトの1つであったため、あまりきれいではありませんが、必要なすべての情報が含まれているはずです。

function query_tasks
{
    if ($args -eq '/?')
    {
        Write-Output "Usage: query_tasks ComputerName taskname"
        Write-Output "Task name defaults to wildcard search and can be multiple words."
        Write-Output "Computer name, and task names must be included."
    }
    elseif ($args.length -lt 2)
    {
        Write-Output "Error: Must include computer name and partial task name to search for."
    }
    else
    {
        $CompName = $args[0]
        $Tasks = $args[1..($args.length-1)]
        $arrTasks = $(schtasks /query /v /fo csv /s $CompName)
        $taskName = "`"*$Tasks*`""
        $arrTask = $arrTasks -like $taskName -split '","'

        $arrSchTasksAttributes = @( )

        $arrSchTasksAttributes += "HostName"
        $arrSchTasksAttributes += "TaskName"
        $arrSchTasksAttributes += "NextRunTime"
        $arrSchTasksAttributes += "Status"
        $arrSchTasksAttributes += "LastRunTime"
        $arrSchTasksAttributes += "LastResult"
        $arrSchTasksAttributes += "Creator"
        $arrSchTasksAttributes += "Schedule"
        $arrSchTasksAttributes += "TaskToRun"
        $arrSchTasksAttributes += "StartIn"
        $arrSchTasksAttributes += "Comment"
        $arrSchTasksAttributes += "ScheduledTaskState"
        $arrSchTasksAttributes += "ScheduledType"
        $arrSchTasksAttributes += "StartTime"
        $arrSchTasksAttributes += "StartDate"
        $arrSchTasksAttributes += "EndDate"
        $arrSchTasksAttributes += "Days"
        $arrSchTasksAttributes += "Months"
        $arrSchTasksAttributes += "RunAsUser"
        $arrSchTasksAttributes += "DeleteTaskIfNotRescheduled"
        $arrSchTasksAttributes += "StopTaskIfRunsXHoursandXMins"
        $arrSchTasksAttributes += "Repeat_Every"
        $arrSchTasksAttributes += "Repeat_Until_Time"
        $arrSchTasksAttributes += "Repeat_Until_Duration"
        $arrSchTasksAttributes += "Repeat_StopIfStillRunning"
        $arrSchTasksAttributes += "IdleTime"
        $arrSchTasksAttributes += "PowerManagement"


        $arrTaskObj = $null
        $arrTaskObj = New-Object psobject
        for ($t = 0; $t -lt $arrTask.length; $t++)
        {
            Add-Member -InputObject $arrTaskObj -MemberType NoteProperty `
            -Name $arrSchTasksAttributes[$t] -Value $arrTask[$t]
        }

        $listHeaders = @{Expression={$_.HostName};Label="Host Name"}, @{Expression={$_.TaskName};Label="Task Name"}, @{Expression={$_.NextRunTime};Label="Next Run Time"}, @{Expression={$_.LastRunTime};Label="Last Run Time"}, @{Expression={$_.LastResult};Label="Last Result"}, @{Expression={$_.Status};Label="Current Status"}
        $arrTaskObj | Format-List $listHeaders
    }
}

基本的に、スケジュールされたタスクリスト全体をサーバーに照会し、出力を配列として受け取ります。次に、特定のスケジュールされたタスクを含む行を出力で検索します。それが見つかると、検索されたタスクのデータ行の配列が生成されます(この時点ではヘッダー情報はありません)。次に、スケジュールされたタスクが配列として返すヘッダー情報を使用して、ヘッダー情報の各部分をプロパティとして使用してカスタムオブジェクトを構築し、特定のタスクの配列からのデータを入力します。

オブジェクトの作成方法が原因で、このスクリプトを微調整して、複数のスケジュールされたタスクを含めることができるようにすることができます。現状では、出力は$ listHeaders変数でフィルタリングされますが、それを実行して$ arrTaskObjオブジェクトをパイプに出力するだけで、のプロパティを呼び出してアクセスできるようになります。

0
Matrix Mole