【发布时间】:2018-05-05 20:06:39
【问题描述】:
当我在字符串中使用* 时,Get-ChildItem 返回值。
$Files = Get-ChildItem "C:\PROD\Logs\exec_package_OrderAnalytics_EXTR.dtsx*"
但是当我将路径存储在包含* 的变量中时,它会显示错误:
$PackageName = "OrderAnalytics_EXTR.dtsx"
$PackagePath = "\\pdw01rasci001\SSISPackages\PROD\Logs\exec_package_$($PackageName)*"
$Files = Get-ChildItem "$PackagePath"
错误信息:
Get-ChildItem : 路径中的非法字符。 在行:25 字符:10 + $Files = 获取子项 $PackagePath |排序对象-Property CreationT ...`那么我应该如何使用* 以及Get-ChildItem 中的变量名来获得结果呢?
【问题讨论】:
-
为我工作,当我复制和粘贴您的代码时没有收到该错误消息..?
-
@Anders:虽然封闭的
"..."不是必需的,但它们在这里也没有什么区别(与类似 POSIX 的 shell 不同,PowerShell 的通配符支持不依赖于 unquoted 论据)。 -
AkashPaul:您的两个示例使用不同的路径 - 您的问题可能与变量的使用无关,而是与 UNC 路径引用的目录中存在的特定文件有关。
-
您的错误信息与您的代码不匹配。请创建一个minimal reproducible example 并发布该代码及其产生的错误消息。另外,请避免使用
$($variable)在字符串中插入变量的构造。正确的方式是${variable}。 -
@Clint 我认为这是一种很好的做法,因为子表达式的工作方式。它们执行嵌套命令并返回输出,然后将其嵌入到字符串中。如果一个变量只是简单地回显该变量的值,因此结果与扩展变量相同,并且在某些情况下您无法避免它(例如,对于数组、对象属性等的索引访问) .),但 IMO 是一种比扩展变量更不干净的方法。此外,较少的特殊字符提高了整体可读性。 ;)
标签: powershell variables get-childitem illegal-characters