Вам нужно окружить $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