【问题标题】:Powershell file URL / file filteringPowershell 文件 URL/文件过滤
【发布时间】:2016-10-05 17:19:45
【问题描述】:

我正在尝试生成带有文件索引的 html 页面。这种方法可以无缝运行:

$htmlout = Get-ChildItem -Path "$SearchPath" -Filter "$fileType" -Recurse |
Select @{Name="Link";Expression={("<a rel=" + $_.FullName + " href=file:///" + $_.FullName + ">$_</a>")}}

“链接”列只有文件名(即 test.txt),并在单击时显示文件内容。然后我们有一个额外的要求来跳过旧文件。脚本现在是:

$htmlout = Get-ChildItem -Path "$SearchPath" -Recurse -include ("$fileType") | Where-Object {$_.LastWriteTime -ge "01/01/2014"} |` Select @{Name="Link";Expression={("<a rel=" + $_.FullName + " href=file:///" + $_.FullName + ">$_</a>")}}

它仍然有效,但链接列现在显示整个文件路径 + 文件名(即 \fileserver\folder1\folder2\test.txt)。 添加 >$_.Name

我试图了解为什么相同的 URL 行在过滤器更改后表现不同。

【问题讨论】:

  • 我看不出它的行为有所不同;当我尝试时,您的第一个版本包括文件名的完整路径。而您的Adding &gt;$_.Name&lt; does not work here. 是因为您无法访问这样的字符串中的属性:请参阅:stackoverflow.com/questions/1145704/…
  • 这不是完全必要的,但我建议你不要随意将你的变量包裹在引号中,如果它们已经是字符串,或者当它们已经自包含时,将它们包裹在括号中。

标签: html powershell url filter


【解决方案1】:

背景

据我所知,.ToString() 方法与Get-ChildItem 返回的对象的DefaultDisplayProperty 之间的交互存在差异。 p>

当以下两个条件都为真时,行为就会显现:
- 正在使用-filter 参数。
- -Path 参数的值解析为单个目录,无论是否使用-Recurse

在上述情况下,PowerShell 实现的.ToString() 方法默认使用Name 属性,而不是像所有其他场景那样使用FullName

我的猜测是,这种不一致是由于使用 -Filter 时文件系统提供程序返回的底层对象类型,而不是 PowerShell 在处理搜索/过滤器本身时返回的对象(就像 @987654328 的情况一样@)。

观察

当您将 $_ 管道对象变量用双引号括起来时,PowerShell 的类型转换会隐式调用 .ToString() 方法,您会得到结果名称变化。

解决方案

要纠正您的问题,您可以简单地在两个代码示例中使用 -Filter 并获得所需的输出,但是,这迟早会导致问题。

更合适的解决问题的方法是在双引号字符串中正确使用 PowerShell 子表达式

要创建子表达式,只需像这样包装所需的代码:$()。这在哪些字符是代码和哪些是字符串的一部分之间创建了一个分隔;在您的情况下,您可以使用成员访问运算符.。该方法还减少了使用+ 运算符进行字符串连接的需要。

解决方案代码:

$HTMLOut = Get-ChildItem -Path $SearchPath -Recurse -Include $FileType | Where-Object {$_.LastWriteTime -ge "01/01/2014"} | Select @{Name="Link";Expression={("<a rel=$($_.FullName) href=file:///$($_.FullName)>$($_.Name)</a>")}}

【讨论】:

  • 附带说明,您可能应该将 FullName 用双引号括起来,以防文件路径有空格,否则您的 HTML 可能会损坏。要转义第二组双引号,请使用反引号 `.
  • 感谢@Jessie 的详细回答,它现在可以按预期工作了!
猜你喜欢
  • 2021-12-02
  • 2021-03-28
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2019-11-07
  • 2017-11-11
相关资源
最近更新 更多