好吧,我已经在这个问题上挣扎了很长时间。我有一个项目来比较两个文件夹,两台服务器各有一个。我们将源服务器上的文件与目标服务器上的文件进行比较,并将创建一个来自源服务器的文件列表,一旦目标服务器上的更新完成,这些文件将需要刷新。

这是我的脚本(非常感谢 http://quickanddirtyscripting.wordpress.com 的原始脚本):

param ([string] $src,[string] $dst)

function get-DirHash()
{
    begin
    {
        $ErrorActionPreference = "silentlycontinue"
    }
    process
    {
        dir -Recurse $_ | where { $_.PsIsContainer -eq $false -and ($_.Name -like "*.js" -or $_.Name -like "*.css"} | select Name,FullName,@{Name="SHA1 Hash"; Expression={get-hash $_.FullName -algorithm "sha1" }}
    }
    end
    {
    }
}

function get-hash
{
    param([string] $file = $(throw 'a filename is required'),[string] $algorithm = 'sha256')
    try
    {
        $fileStream = [system.io.file]::openread((resolve-path $file));
        $hasher = [System.Security.Cryptography.HashAlgorithm]::create($algorithm);
        $hash = $hasher.ComputeHash($fileStream);
        $fileStream.Close();
    }
    catch
    {
        write-host $_
    }
    return $hash
}

Compare-Object $($src | get-DirHash) $($dst | get-DirHash) -property @("Name", "SHA1 Hash")

现在出于某种原因,如果我对本地路径运行它说 c:\temp\test1 c:\temp\test2 它工作正常,但是当我使用两台服务器之间的 UNC 路径运行它时,我得到



对此的任何帮助将不胜感激。最终结果应该是一个文件列表,但由于某种原因它不喜欢 UNC 路径。

脚本名称是 compare_js_css.ps1 并且这样调用:
.\compare_js_css.ps1 c:\temp\test1 c:\temp\test2 .\compare_js_css.ps1 \\\\devserver1\c$\websites\site1\website \\\\devserver2\c$\websites\site1\website
为什么?

最佳答案

这给出了没有 Microsoft.PowerShell.Core\FileSystem:: 的路径:

(Resolve-Path $file).ProviderPath

无需使用字符串替换。

关于Powershell UNC 路径不受支持异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10656846/

10-10 23:36
查看更多