Как правильно получить имя переменной и импортировать ее в расписание задач с powershell? - PullRequest
0 голосов
/ 23 января 2020

У меня есть проблемы с этой строкой кода. В настоящее время я могу l oop имя файла xml внутри папки. Но как использовать эту переменную и поставить после C: \ Windows \ System32 \ Tasks \ Job \? В настоящее время PowerShell всегда определяет его как текст.

$fileDirectory = "C:\Windows\System32\Tasks\Job\*.xml";
foreach($file in Get-ChildItem $fileDirectory)
{
    $file.name
Register-ScheduledTask -xml (Get-Content "C:\Windows\System32\Tasks\Job\$file.name" | Out-String) -TaskName $file.name -TaskPath "\Job" -User "MyAccount" –Force
}

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Вам нужно окружить $file.name в "C:\Windows\System32\Tasks\Job\$file.name" оператором Subexpression $(), в противном случае он просто пытается заменить $file part.

Сравните это:

PS> $file = get-item "c:\temp\temp.txt"
PS> "C:\Windows\System32\Tasks\Job\$file.name"
C:\Windows\System32\Tasks\Job\C:\temp\temp.txt.name

с этим:

PS> $file = get-item "c:\temp\temp.txt"
PS> "C:\Windows\System32\Tasks\Job\$($file.name)"
C:\Windows\System32\Tasks\Job\temp.txt

Первый пример оценивает $file (который является System.IO.FileInfo объектом) в C:\temp\temp.txt и просто заменяет $file в строке, оставляя конечный .name в виде литерального текста.

Во втором примере вместо этого оценивается $($file.name) до temp.txt (который является строкой) и заменяется весь $($file.name) подвыражение.

Но еще проще, в вашем случае вы можете просто использовать $file.FullName, который дает полный путь:

PS> $file = get-item "c:\temp\temp.txt"
PS> $file.FullName
c:\temp\temp.txt
0 голосов
/ 23 января 2020

Другой вариант - использовать оператор формата f.

$fileDirectory = "C:\Windows\System32\Tasks\Job\*.xml";
foreach($file in Get-ChildItem $fileDirectory)
{
    $file.name
Register-ScheduledTask -xml (Get-Content "C:\Windows\System32\Tasks\Job\{0}" -f $file.name | Out-String) -TaskName $file.name -TaskPath "\Job" -User "MyAccount" –Force
}
...