Скрипт Powershell для создания запланированных задач из CSV-файла - PullRequest
3 голосов
/ 02 июня 2010

Я бы хотел использовать Powershell для создания пары запланированных задач на сервере. Я создал файл из существующего расписания

Я загрузил csv-файл, передал его в select и получил всю информацию, которая мне требуется, из csv-файла. Однако я не уверен, как передать эти результаты внешней команде не powershell.

Import-Csv .\listoftasks.csv | Select 'Run As User','RP','Scheduled Type','TaskName','Task To Run','Repeat: Every','Repeat: Until: Duration' 

Я хотел бы сделать что-то вроде:

* +1007 *

Ответы [ 2 ]

4 голосов
/ 04 июня 2010

Публикуя конечный результат совета, который я получил, надеюсь, кто-то еще сможет его использовать. :)

#Added a column to the csv with heading RP - contains the password if you have to use
#hardcoded account \ passwords and cant use the system accounts
$ListOfTasks = Import-Csv ListOfTasksExport.csv |   Select 
                                                   'Run As User' `
                                                ,'RP' `
                                                ,'Scheduled Type' `
                                                ,'TaskName' `
                                                ,'Task To Run' `
                                                ,'Repeat: Every' `
                                                ,'Repeat: Until: Duration' `
                                                ,'Start Time' `
                                                , 'HostName' 

ForEach($item in $ListOfTasks)
{
    $dateOfItem = [DateTime]::Parse($item.'Start Time')
    $stringOfDateOfItem = $dateOfItem.ToString("HH:mm")
    $tr = $item.'Task To Run'
    $user = $item.'Run as User'
    $UserPassword = $item.'RP'
    $scheduledType = $item.'Scheduled Type'
    $taskName = $item.'TaskName'
    $taskToRun = $item.'Task To Run'
    $hostName = $item.'HostName'
    $serviceAccount = 'domain\serviceAccount'
    $serviceAccountPassword = 'HardCodedPassword'

   #Debugging
   #Write-Host -BackgroundColor yellow $taskName
   #Write-Host $stringOfDateOfItem
   #Write-Host $tr
   #Write-Host $user
   #Write-Host $UserPassword
   #Write-Host $scheduledType
   #Write-Host $taskName
   #Write-Host $taskToRun

  #Checks if the user is nt authority, it does not put the password field in
if($env:computername.Contains($hostName))
{
    if($user.Contains("NT AUTHORITY"))
    {
        schtasks /create /RU $user /SC $scheduledType /TN $taskName /TR $taskToRun /ST $stringOfDateOfItem /F 
    }
    else
    {
        schtasks /create /RU $user /RP $UserPassword /SC $scheduledType /TN $taskName /TR $taskToRun /ST $stringOfDateOfItem /F 
    }
}
else
{
    if($user.Contains("NT AUTHORITY"))
    {
        schtasks /create /s $hostName /U $serviceAccount /P $serviceAccountPassword /RU $user /SC $scheduledType /TN $taskName /TR $taskToRun /ST $stringOfDateOfItem /F 
    }
    else
    {
        schtasks /create /s $hostName /U $serviceAccount /P $serviceAccountPassword /RU $user /RP $UserPassword /SC $scheduledType /TN $taskName /TR $taskToRun /ST $stringOfDateOfItem /F 
        }
    }
}

4 голосов
/ 03 июня 2010

Попробуйте использовать ForEach-Object:

Import-Csv .\listoftasks.csv | 
Select-Object 'Run As User','RP','Scheduled Type','TaskName','Task To Run','Repeat: Every','Repeat: Until: Duration' | 
ForEach-Object { Invoke-Expression "schtasks /create /RU ..." }

Кроме того, будьте осторожны со свойствами, имена которых содержат пробелы. Вы можете получить к ним доступ, например, если имя содержит пробел:

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