powershell 使用-File而不是-Command运行脚本时,Get-ChildItem找不到目录

jk9hmnmh  于 2023-03-30  发布在  Shell
关注(0)|答案(1)|浏览(184)

我不得不更改我的脚本使用-File而不是-Command,它曾经使用GetChildItem查找目录,但现在它找不到它。该脚本是从一个旧的旧perl脚本调用的,这是它在那里的样子:

my $resultPS = `"C:\\Program Files\\PowerShell\\7\\pwsh.exe" -NoProfile -noninteractive -ExecutionPolicy bypass -File "\\\\wserverp01\\support\\Retailer_SN\\MoveSNToSprdsht_1.0.ps1" -outFilePathExcel_pl "$service_report_xls" -out_pth "$retailer_blob_scan_dir"`;

我已经记录并验证了变量包含了perl脚本中应该包含的内容。我过去使用-Command而不使用传递的参数,但现在需要将xls和dir作为参数传递,因此将其更改为-File。
在powershell脚本中,我记录了我的参数,它们看起来很好,除了$retailer_blob_scan_dir的尾部/被删除,而它曾经在ps脚本中定义的字符串中:

[cmdletbinding()]
param( [Parameter(Mandatory)][string]$outFilePathExcel_pl,  [Parameter()][string]$out_pth="\\wserverp01\support\Retailer_SN\OutputSprdsht\")

Start-Transcript -path '\\wserverp01\support\Retailer_SN\Logs\MoveSNToSprdsht.log' 

Write-Host "new tab will go to:$($outFilePathExcel_pl)" #need to use below instead of $outFilePathExcel############################
Write-Host "Will get blob scan files from:$($out_pth)"

#make sure params are valid paths
if('' -eq $out_pth)
{
    Write-Host "out_pth was blank so setting it"
    $out_pth = "\\wserverp01\support\Retailer_SN\OutputSprdsht\"
}

if('' -eq $outFilePathExcel_pl)
{
    Write-Host "outFilePathExcel_pl was blank so setting it"
    $outFilePathExcel_pl = "\\WserverP01\support\path_Summary\Retailer_ServicePropertiesReport.xlsx"
}

[System.String] $excel_File_from = ""

############## hours - 72 hours is ok for now so we don't cut it too close for file timestamp for blob scan..blob scan run on weekend, use Monday:
Get-ChildItem $out_pth | Foreach-Object {$lastupdatetime=$_.LastWriteTime;$nowtime = get-date; if (($nowtime - $lastupdatetime).totalhours -le 72) {write-host "here2";$excel_File_from=$_.Name;write-host $_.name}}

由于out_pth中的文件是星期天创建的,我编辑了它,所以日期现在在资源管理器中是今天。所以它在72小时内。Get-ChildItem中的错误是
Get-ChildItem:\wserverp01\support\零售商_序号\移动序号到Sprdsht_1.0.ps1:63行|六十三|获取子项$out_pth|Foreach-Object {$lastupdatetime=$_.LastWrite ...|~~~~~~~~~~~~|找不到路径“\WserverP01\support\Retailer_SN\OutputSprdsht”,因为它不存在。
它曾经用Get-ChildItem找到这个目录,我唯一能想到的就是尾部的斜杠,或者用File而不是Command调用,这样我就可以在运行它时使用参数。他们还改变了它,所以他们想在周末在out_pth中生成文件,所以我把Get-ChildItem中使用的时间从12小时改为72小时。perl脚本运行期间系统调度程序中的权限没有改变。任何关于这个问题可能是什么以及如何修复它的信息都会很棒。

smdncfj3

smdncfj31#

看起来我的问题是$retailer_blob_scan_dir周围的双引号,在perl调用MoveSNToSprdsht powershell脚本中。当我在powershell脚本中打印出来时,我也看到了双引号。
当我在perl中删除双引号时,问题消失了,找到了目录:

my $resultPS =  "C:\\Program Files\\PowerShell\\7\\pwsh.exe" -NoProfile -noninteractive -ExecutionPolicy bypass -File "\\\\wserverp01\\support\\Retailer_SN\\MoveSNToSprdsht_1.0.ps1" -outFilePathExcel_pl $service_report_xls -out_pth $cvs_blob_scan_dir`;

相关问题