新手powershell参数问题



我做了一个powershell脚本,[1]接受2个参数(aka parameters),[2]改变文件的修改日期&时间,和[3]写点东西给主持人。下面的命令行在powershell控制台中工作得很好,但是当我在Windows cmd提示符(DOS)窗口中运行相同的命令行时,会触发一个错误消息:

E:AppsUtilitiesByMarcChange_DateTime_for_test1.bat_and_Hello_world_with_2_named_args_aaa.ps1 -dateTimeVarArg "01/11/2005 06:01:36" -file_dateTimeMod_fullname "E:AppsDelete01test1.bat"

下面是powershell脚本的代码,我给了它一个长名字,'Change_DateTime_for_test1.bat_and_Hello_world_with_2_named_args_aaa.ps1':

param ( [string]$dateTimeVarArg,  [string]$file_dateTimeMod_fullname)
Get-ChildItem  $file_dateTimeMod_fullname | % {$_.LastWriteTime = $dateTimeVarArg}
#Get-ChildItem  "E:AppsDelete01test1.bat" | % {$_.LastWriteTime = $dateTimeVarArg}
$strString = "Hello World"
write-host $strString

function ftest{
$test = "Test"
write-host $test
}
ftest

当我在Windows DOS命令提示符设置中运行上面所示的命令行时,我得到以下错误消息:

Exception setting "LastWriteTime": "Cannot convert null to type "System.DateTime"."
At E:AppsUtilitiesByMarcChange_DateTime_for_test1.bat_and_Hello_world_with_1_named_arg_aaa.ps1:6 char:50
+ ... "E:AppsDelete01test1.bat" | % {$_.LastWriteTime = $dateTimeVarArg}
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting

我想知道[1]如何改变上面显示的命令行(它在powershell控制台中工作得很好),以便它在Windows DOS命令提示符设置中工作,[2]在那里我可以了解更多关于为什么我的命令行触发错误,以及如何避免它们。
根据"Get-Host | Select-Object version"命令的输出,我正在运行version。5.1.19041.1682 .

如有任何建议,我将不胜感激。

默认情况下,您可以直接cmd.exe(Windows遗留shell)执行PowerShell脚本(.ps1文件),或者从外部PowerShell执行.

  • 尝试这样做打开脚本文件编辑,因为双击.ps1文件从文件资源管理器/桌面。

从PowerShell外部执行.ps1脚本需要使用PowerShell CLI(powershell.exefor Windows PowerShell,pwshfor PowerShell (Core) 7+),在你的情况下,它转换为一个调用,如(额外的CLI参数可能被调用):

powershell.exe -File E:AppsUtilitiesByMarcChange_DateTime_for_test1.bat_and_Hello_world_with_2_named_args_aaa.ps1 -dateTimeVarArg "01/11/2005 06:01:36" -file_dateTimeMod_fullname "E:AppsDelete01test1.bat"

至于你试过的:

能够从cmd.exe执行.ps1的事实表明,您更改了这些文件的文件类型定义,改为通过powershell.exe执行。

您试图传递给脚本的参数忽略的事实-正如您得到的错误消息所暗示的那样-表明您使用文件资源管理器的Open with快捷菜单命令选择使用powershell.exe打开所有.ps1文件;上述方法不支持参数传递。

是一种改变文件类型定义以支持参数传递的方法,在这个答案中有详细说明("编程方法"一节)。

但是,一般来说,我建议不要应用这个自定义,特别是在必须由其他用户运行的批处理文件中/在其他机器上,不能期望有相同的自定义。

相关内容

  • 没有找到相关文章

最新更新