现有代码扫描IIS root及其子目录中的.htm文件,并生成新的.htm文件,该文件仅具有指向根目录中.htm文件的功能超链接。根子目录中.htm文件的超链接无法正常运行,因为它没有超链接中包含的子文件夹路径。 我想修改我现有的代码,以便子文件夹中.htm文件的超链接也可以。
Get-ChildItem "c:\inetpub\wwwroot" -Recurse -Force |
ConvertTo-Html -Fragment Name, Name, LastWriteTime `
-PreContent '<html><head><title>Test</title></head><body>' `
-PostContent '</body></html>' |
% { $_ -replace '<th>.*</th>','<th>Files</th>' `
-replace '<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',
'<td><a href="$1">$2</a> $3</td>'
} | Set-Content "c:\inetpub\wwwroot\index.htm"
答案 0 :(得分:2)
由于你需要在URL中交换basedir(注意:这是重要的详细信息,你不应该从你的问题中省略这些内容),这样的事情应该有效:
$basedir = 'c:\inetpub\wwwroot'
$exp = [regex]::Escape($basedir)
$server = 'http://172.16.x.x'
Get-ChildItem $basedir -Recurse -Force |
select Name, LastWriteTime,
@{n="URL";e={$_.FullName -replace $exp, $server -replace '\\', '/'}} |
ConvertTo-Html -Fragment URL, Name, LastWriteTime `
-PreContent '<html><head><title>Test</title></head><body>' `
-PostContent '</body></html>' |
% { $_ -replace '<th>.*</th>','<th>Files</th>' `
-replace '<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',
'<td><a href="$1">$2</a> $3</td>'
} | Set-Content "c:\inetpub\wwwroot\index.htm"
其他select
指令会将FullName
转换为URL
形式的新属性http://172.16.x.x/path/to/file
。然后ConvertTo-Html
会将此新属性以及传递的属性Name
和LastWriteTime
转换为HTML。