Вы не показываете, что находится в текстовом файле, заставляя нас догадываться, что на самом деле не очень хорошая вещь по отношению к попыткам помочь вам. Итак, я буду считать, что это просто список букв дисков или пути ООН C 's, которая на самом деле спорный вопрос, так как вы не можете вытащить те динамически, таким образом, нет необходимости в файле
1002 * Я не. Я не понимаю, почему вы делаете это ...
Get-Content 'C:\Users\Administrator\Desktop\here\drive4.txt' |
Out-String
Если это просто текстовый файл для чтения, зачем вам это куда-то пускать?
Вам не нужны двойные кавычки для это. Одинарные кавычки для простой строки, двойные для расширения переменной или другие специфические c требования к форматированию
$dest = 'C:\Users\Adminstrator\Desktop\here'
Просто передайте чтение напрямую
Get-Content 'C:\Users\Administrator\Desktop\here\drive4.txt' |
ForEach {
"Processing location $($PSItem.FullName)"
Copy-Item -Path $PSItem.FullName -Destination $dest -Filter 'peruser.vbs' -Recurse -WhatIf
}
Примечание: Вам не нужен Write-Host для вывода на экран, так как это по умолчанию PowerShell, как я покажу в следующем примере. На самом деле, кроме написания цветного текста на экране, вам вообще не нужно было бы использовать Write-Host / echo, ну, есть несколько других спецификаций c раз, чтобы использовать его.
Также примечание , относительно Write-Host от изобретателя Monad / PowerShell Джеффри Сновера
Вам также не обязательно нужны оба-Get-ChildItem и Copy-Item, так как оба будут читать рекурсивное дерево папок. Как я покажу ниже. Я использую сплаттинг, чтобы сжать блок кода для удобства чтения.
Итак, если я продемонстрирую это, просто используя диск и папку в моей системе. И пошагово разберитесь со сценарием, чтобы убедиться, что я получаю то, что ожидаю на каждом шаге, прежде чем перейти к следующему.
Get-PSDrive -PSProvider FileSystem |
Format-Table -AutoSize
<#
# Results
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
C 357.48 118.83 FileSystem C:\ Windows\system32
D 114.10 362.71 FileSystem D:\ Scripts
E 1194.00 668.89 FileSystem E:\
F 3537.07 188.83 FileSystem F:\
G FileSystem G:\
#>
# Validate if there is any content in the destination
Try
{
Get-PSDrive -PSProvider FileSystem |
Where Name -eq 'D' |
ForEach {
"Processing location $($PSItem.Root) and the contents are as listed."
(Get-ChildItem -Path 'D:\Temp\here' -Recurse).FullName
}
}
Catch {Write-Warning -Message 'No content in the destination folder'}
<#
# Results
Processing location D:\ and the contents are as listed.
WARNING: No content in the destination folder
#>
# Show what is on the drive for the source files
Get-PSDrive -PSProvider FileSystem |
Where Name -eq 'D' |
ForEach{
"Processing the location $($PSItem.Root)"
(Get-ChildItem -Path "$($PSItem.Root)\Temp\book1.csv" -Recurse).FullName
}
<#
# Results
Processing the location D:\
D:\Temp\Source\book1.csv
D:\Temp\book1.csv
#>
<#
# Show what will happen if a Copy files from the source to the destination occurs
Using splatting for readability
#>
Get-PSDrive -PSProvider FileSystem |
Where Name -eq 'D' |
ForEach{
"Processing the location $($PSItem.Root)"
$CopyItemSplat = @{
Path = "$($PSItem.Root)\Temp\book1.csv"
Destination = "$($PSItem.Root)\Temp\here"
Recurse = $true
WhatIf = $true
}
}
Copy-Item @CopyItemSplat
<#
# Results
Processing the location D:\
What if: Performing the operation "Copy File" on target "Item: D:\Temp\book1.csv Destination: D:\Temp\here\book1.csv".
If the results are as expected, execute the action
Using splatting for readability
#>
Get-PSDrive -PSProvider FileSystem |
Where Name -eq 'D' |
ForEach{
"Processing the location $($PSItem.Root)"
$CopyItemSplat = @{
Path = "$($PSItem.Root)\Temp\book1.csv"
Destination = "$($PSItem.Root)\Temp\here"
Recurse = $true
}
}
Copy-Item @CopyItemSplat
<#
# Results
Processing the location D:\
#>
# Validate if there is any content in the destination
Try
{
Get-PSDrive -PSProvider FileSystem |
Where Name -eq 'D' |
ForEach {
"Processing location $($PSItem.Root) and the contents are as listed."
(Get-ChildItem -Path 'D:\Temp\here' -Recurse).FullName
}
}
Catch {Write-Warning -Message 'No content in the destination folder'}
<#
# Results
Processing location D:\ and the contents are as listed.
D:\Temp\here\book1.csv
#>