[英]How to pass a parameter from Batch file to a function inside a Powershell script
[英]How to read a text file to a variable in batch and pass it as a parameter to a powershell script
我有一个生成报告的 powershell 脚本,并将它连接到 io.filesystemwatcher。 我正在努力提高错误处理能力。 我已经在 try-catch 循环中拥有报告生成功能(仅接收文件路径),该功能基本上会杀死 word、excel 和 powerpoint,如果失败,则再次尝试。 这似乎工作得很好,但我想嵌入另一个 try-catch 循环,如果它连续第二次失败,它将重新启动计算机并在重新启动后生成报告。
阅读本文后,我决定尝试修改注册表: https : //cmatskas.com/configure-a-runonce-task-on-windows/
我的计划是,在第二个 try-catch 循环中,我将创建一个名为 RecoveredPath.txt 的文本文件,文件路径是其唯一内容,然后添加如下内容:
Set-ItemProperty "HKLMU:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name '!RecoverReport' -Value "C:\...EmergencyRecovery.bat"
重启前。 在批处理文件中,我有:
set /p RecoveredDir=<RecoveredPath.txt
powershell.exe -File C:\...Report.ps1 %RecoveredDir%
当我尝试运行批处理脚本时,它不会产生任何错误,但似乎没有做任何事情。 我尝试添加 echo 语句,它将文本文件的值存储为变量,但似乎没有将其正确传递给 powershell。 我还尝试添加 -Path %RecoveredDir% 但这产生了错误(report.ps1 中的参数名为 $Path)。
我做错了什么?
一个潜在的问题是,不将%RecoveredDir%
在"..."
会破坏包含空格和其他特殊字符的路径。
然而,更大的问题是,仅使用文件名RecoveredPath.txt
意味着该文件将在当前目录中的任何目录中查找。
在评论中,您声明批处理文件和输入文件RecoveredPath.txt
都位于您的桌面文件夹中。
但是,重要的不是批处理文件的位置,而是进程的当前目录- 当批处理文件在启动时自动运行时,这很可能不是您的桌面。
鉴于批处理文件和输入文件位于同一文件夹中,并且您可以使用%~dp0
(包括尾随\\
)引用批处理文件的完整文件夹路径,请修改您的批处理文件,如下所示:
set /p RecoveredDir=<"%~dp0RecoveredPath.txt"
powershell.exe -File C:\...Report.ps1 "%RecoveredDir%"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.