gpt4 book ai didi

Powershell:Get-ChildItem - 管道到 Rename-Item 和 Copy-Item

转载 作者:行者123 更新时间:2023-12-03 01:09:50 27 4
gpt4 key购买 nike

我正在尝试编写一个脚本来收集服务器名称列表,然后遍历每个服务器名称并获取目录中最新文件夹的第二个文件夹,重命名它,并将其复制到另一台服务器。我在一个命令中让它全部工作时遇到了麻烦,我不确定将它拆分并让它正常工作的最佳方法是什么。尝试不同的事情时出现错误,主要是“重命名项目:无法评估参数“NewName”,因为它的参数被指定为脚本 block 并且没有输入”。以下是导致此错误的代码片段:

$serverNames = Get-Content -Path "C:\servers.txt"

foreach ($serverName in $ServerNames) {

$reportServer = "a56741035"

Get-ChildItem "\\$($serverName)\d$\mposlogs\device" | where { $_.PSIsContainer } | Sort CreationTime -Descending | Select -Skip 1 | Select -First 1 | Rename-Item -NewName { "$serverName" + "_" + $_.Name } | Copy-Item $_.FullName -Destination "\\$($reportServer)\c$\temp\mpos\logs" }

另一个是“无法将参数绑定(bind)到参数'Path',因为它为空”。以下是导致此错误的代码:
$serverNames = Get-Content -Path "C:\servers.txt"

foreach ($serverName in $ServerNames) {

$reportServer = "a56741035"

Get-ChildItem "\\$($serverName)\d$\mposlogs\device" | where { $_.PSIsContainer } | Sort CreationTime -Descending | Select -Skip 1 | Select -First 1 | ForEach-Object { Rename-Item -NewName { "$serverName" + "_" + $_.Name } | Copy-Item $_.FullName -Destination "\\$($reportServer)\c$\temp\mpos\logs" } }

我觉得我很接近,只是没有看到什么。非常感谢您的任何帮助,非常感谢。祝你有美好的一天。

编辑包括最新的代码:
 Get-ChildItem "\\$($serverName)\d$\mposlogs\device" | where {  $_.PSIsContainer } | Sort CreationTime -Descending | Select -Skip 1 | Select -First 1 | ForEach-Object { Rename-Item -Path $_.FullName -NewName ( "$serverName" + "_" + $_.Name ) ; Copy-Item $_.FullName -Destination "\\$($reportServer)\c$\temp\mpos\logs" } 

最新评论代码:
Get-Child-Item "\\$serverName\d$\mposlogs\device" | where {$_.PSIsContainer} | Sort CreationTime -Descending | Select -Skip 1 | Select -First 1 | ForEach-Object { Rename-Item -Path $_.FullName -NewName ( "$serverName" + "" + $.Name ) ; Copy-Item ( "$serverName" + "" + $.Name ) -Destination "\\$reportServer\c$\temp\mpos\logs" } 

最佳答案

所以这比我想象的要困难,诀窍是 Rename-Item 似乎基本上消耗了管道对象,而没有给你机会在后续名称中使用该对象(使用脚本 block 也不是真的理想,更容易使用简单的连接字符串)所以你需要改变 Rename-Item你的循环的一部分稍微

Rename-Item -Path $_.FullName -NewName ("$serverName" + "_" + $_.Name)

至于语法更改,prageeth 建议您可以制作它们,但它们是不需要的,并且 imo 会增加歧义(Get-Childitem 不需要转义字符来访问管理员共享,即使没有使用 $($) 语法也没有错访问属性)。

编辑

好的,在评论中工作了一会儿之后,这里是完整 GCI 管道的更新版本。我在我的环境中成功地测试了它,所以手指交叉它对你有用。如果其中任何部分没有意义,请告诉我。
Get-ChildItem "\\$serverName\d$\mposlogs\device" | where {$_.PSIsContainer} | Sort CreationTime -Descending | Select -Skip 1 | Select -First 1 | ForEach-Object { Rename-Item -Path $_.FullName -NewName ( "$serverName" + "_" + $_.Name ) -PassThru | Copy-Item  -Destination "\\$reportServer\c$\temp\mpos\logs" }

关于Powershell:Get-ChildItem - 管道到 Rename-Item 和 Copy-Item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41187118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com