Ну, я так долго боролся с этим. У меня есть проект для сравнения двух папок, по одному на каждом из двух серверов. Мы сравниваем файлы на исходном сервере с серверами на целевом сервере и создадим список файлов из источника, которые необходимо обновить после завершения обновления на целевом сервере.Powershell UNC Path не поддерживается исключение
Вот мой сценарий (большое спасибо 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
пути между два сервера я получаю
Exception призывающего «OpenRead» с «1» аргументом (ы): «формат данного путем не поддерживается.»
Любая помощь с этим была бы принята с благодарностью. Конечным результатом должен быть список файлов, но по какой-то причине ему не нравится путь 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
- возвращает вышеупомянутое исключение.
Почему?
Хм ... все еще получают ту же ошибку. Я знаю, что это не проблема с разрешениями, так как у меня есть доступ администратора на обоих серверах. –
@BobLyman Сделайте 'write-host (Resolve-Path $ file) .Path'. –
Я получаю Microsoft.PowerShell.Core \ FileSystem :: \\ ltlymanb \ test1 \ style.min.css –