Powershell文件URL /文件过滤

时间:2016-10-05 01:18:44

标签: html powershell url filter

我正在尝试使用文件索引生成一个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>")}}

它仍然有效,但Link列现在显示整个文件路径+文件名(即\ fileserver \ folder1 \ folder2 \ test.txt)。 添加&gt; $ _。名称&lt;在这里不起作用。

我试图理解为什么在过滤器更改后相同的URL行的行为会有所不同。

1 个答案:

答案 0 :(得分:1)

背景

据我所知,.ToString()方法与{{1}返回的对象的 DefaultDisplayProperty 之间的互动存在差异}。

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

在上述情况下,PowerShell实施的-Recurse方法使用 Name 属性作为默认值,而不是 FullName ,就像所有其他方案中的情况一样。

我的猜测是,这种不一致是由于使用.ToString()时FileSystem提供程序返回的底层对象类型,而不是PowerShell在处理搜索/过滤器本身时返回的对象(如同-Filter)。

观察

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

解决方案

要解决您的问题,您只需在两个代码示例中使用.ToString()并获得所需的输出,但这很容易迟早会出现问题。

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

要创建子表达式,只需包含所需的代码,如下所示:-Filter。这创建了一个分隔,其中字符是代码,哪些是字符串的一部分;在您的情况下允许您使用成员访问运算符$()。该方法还减少了与.运算符进行字符串连接的需要。

解决方案代码:

+