Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] \\?\ для сетевой шары (http://forum.oszone.net/showthread.php?t=332894)

Elven 31-01-2018 19:09 2794843

\\?\ для сетевой шары
 
Есть скрипт на ПоШе для проверки прав на некоторых папках. Т.к. встречаются папки с чертовски длинными путями (больше 260 символов) пришлось использовать префикс \\?\ как рекомендовано вот здесь. Для локальной папки (например \\?\d:\temp\) все отрабатывает идеально, а вот на сетевой спотыкается. Или я не правильно указываю путь (указывал так: \\?\server\shares\). Что я делаю не так?

Казбек 31-01-2018 19:41 2794854

Цитата:

Цитата Elven
а вот на сетевой спотыкается »

Покажите вывод, когда спотыкается.

Elven 31-01-2018 20:07 2794860

Казбек, это тогда весь скрипт выкладывать/смотреть.
скрипт
Код:

clear
####################
                        #pobieranie uprawnien
                        function get-perm($permission)
                        {
                        $acl.Access.GetEnumerator() | where {$_.IdentityReference -like "do*"} | % {       
                                $user = $_.IdentityReference
                                $perm = $_.FileSystemRights

                                        if ($perm -like $permission)
                                        {
                                                #$p += echo $user.ToString()
                                               

                                                if ($_.IsInherited -eq $true )
                                                        {$p += echo "<font color="blue">$user</font>"}
                                                else
                                                        {$p += echo $user.ToString()}
                                                if ($_.AccessControlType -like 'Deny' )
                                                        {$p += echo "<font color="red">(-)</font>"}                                                                       
                                                                                               
                                                $p += echo "; "
                                               
                                        }
                                }
                       
                       
                               
                                switch($permission)
                                {
                                "*FullControl*"  { if ($p -ne $null) {echo "<tr align="left"><td width="10%">FullAccess:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Modify*"  { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Modify:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Read*"  { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadOnly:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Delete*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Delete:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*AppendData*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">AppendData:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ChangePermissions*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ChangePermissions:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*CreateDirectories*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">CreateDirectories:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*CreateFiles*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">CreateFiles:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*DeleteSubdirectoriesAndFiles*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">DeleteSubdirectoriesAndFiles:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ExecuteFile*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ExecuteFile:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ListDirectory*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ListDirectory:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadAndExecute*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadAndExecute:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadData*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadData:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadExtendedAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadExtendedAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadPermissions*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadPermissions:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*TakeOwnership*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">TakeOwnership:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Synchronize*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Synchronize:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Traverse*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Traverse:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Write*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Write:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*WriteAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">WriteAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*WriteData*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">WriteData:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*WriteExtendedAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">WriteExtendedAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                }
                        }       

##################

$start = Get-Date
$report = 'D:\temp\report.html'
Remove-Item $report -ErrorAction SilentlyContinue
$sciezka2 = "\\fs\logs"       
$sciezka = Read-Host "podaj ścieźkę: "
$OnlyFolder = Read-Host "Skanować tylko foldery? (T/N) "

if($sciezka -eq $null)
        {
                if($OnlyFolder -eq "T" )
                {
                $dirs = Get-ChildItem $sciezka2  -Recurse -Exclude '*.lnk' | Where-Object { $_.PSIsContainer }
                }
                if($OnlyFolder -eq "N" )
                {$dirs = Get-ChildItem $sciezka2  -Recurse -Exclude '*.lnk' }
        }
        else
        {
                if($OnlyFolder -eq "T" )
                {
                $dirs = Get-ChildItem $sciezka -Recurse -Exclude '*.lnk' | Where-Object { $_.PSIsContainer }
                $sciezka2 =$sciezka
                }
                if($OnlyFolder -eq "N" )
                {
                $dirs = Get-ChildItem $sciezka -Recurse -Exclude '*.lnk'
                $sciezka2 =$sciezka
                }
        }


echo "<head><title>Raport - Audyt uprawnień</title></head>" | Out-File $report -Append
echo "<h1 align='center'>Raport - Audyt uprawnień </h1>" | Out-File $report -Append
echo "<br>Data wygenerowania: $(get-date -DisplayHint DateTime -Format F)" | Out-File $report -Append
echo "<table border="1">" | Out-File $report -Append

$j = $dirs.Count
$i=0


######
#katalog ROOT
######

$FullAccess = $null
$ReadOnly = $null
$Modify = $null
$Delete = $null
$groupmembers =$null

#budowanie tabeli w HTML
echo        "<tr> <th BGCOLOR='rgb(240,240,240)' colspan="2">"  | Out-File $report -Append
echo        $sciezka2  | Out-File $report -Append
echo        "</th> </tr>"  | Out-File $report -Append


$acl = Get-Acl $sciezka2
$Owner = $acl.Owner

echo "<tr align="left"><td width="10%">Owner:</td><td width="90%">$Owner</td></tr>" | out-file $report -append

get-perm('*FullControl*')
get-perm('*Modify*')                       
get-perm('*Read*')       
get-perm('*Delete*')                       
get-perm("*AppendData*" )
get-perm("*ChangePermissions*" )
get-perm("*CreateDirectories*" )
get-perm("*CreateFiles*" )
get-perm("*DeleteSubdirectoriesAndFiles*" )
get-perm("*ExecuteFile*" )
get-perm("*ListDirectory*" )
get-perm("*ReadAndExecute*" )
get-perm("*ReadAttributes*" )
get-perm("*ReadData*" )
get-perm("*ReadExtendedAttributes*")
get-perm("*ReadPermissions*" )
get-perm("*TakeOwnership*" )
#get-perm("*Synchronize*" )
get-perm("*Traverse*" )
get-perm("*Write*" )
get-perm("*WriteAttributes*" )
get-perm("*WriteData*" )
get-perm("*WriteExtendedAttributes*" )


######

#Podkatalogi
foreach ( $dir in $dirs)
{
        if($dir -notlike '*~$*')
                {       
            $i+=1
            $perc = $i/$j*100
                $perc = ([Math]::Round($perc))
                write-progress "Zapierdzielam..." "Zakończono: $perc %" -perc $perc


                foreach ($acls in $acl)
                {
                        $FullAccess = $null
                        $ReadOnly = $null
                        $Modify = $null
                        $Delete = $null
                        $groupmembers =$null

                        #budowanie tabeli w HTML
                        echo        "<tr> <th BGCOLOR='rgb(240,240,240)' colspan="2">"  | Out-File $report -Append
                        echo        $dir.fullname  | Out-File $report -Append
                        echo        "</th> </tr>"  | Out-File $report -Append
                       
                       
                        $acl = Get-Acl $dir.fullname
                        $Owner = $acl.Owner
       
                        echo "<tr align="left"><td width="10%">Owner:</td><td width="90%">$Owner</td></tr>" | out-file $report -append
                        <#
                        #pobieranie uprawnien
                        function get-perm($permission)
                        {
                        $acl.Access.GetEnumerator() | where {$_.IdentityReference -like "GH*"} | % {       
                                $user = $_.IdentityReference
                                $perm = $_.FileSystemRights

                                        if ($perm -like $permission)
                                        {
                                                #$p += echo $user.ToString()
                                               

                                                if ($_.IsInherited -eq $true )
                                                        {$p += echo "<font color="blue">$user</font>"}
                                                else
                                                        {$p += echo $user.ToString()}
                                                if ($_.AccessControlType -like 'Deny' )
                                                        {$p += echo "<font color="red">(-)</font>"}                                                                       
                                                                                               
                                                $p += echo "; "
                                               
                                        }
                                }
                       
                       
                               
                                switch($permission)
                                {
                                "*FullControl*"  { if ($p -ne $null) {echo "<tr align="left"><td width="10%">FullAccess:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Modify*"  { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Modify:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Read*"  { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadOnly:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Delete*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Delete:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*AppendData*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">AppendData:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ChangePermissions*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ChangePermissions:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*CreateDirectories*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">CreateDirectories:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*CreateFiles*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">CreateFiles:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*DeleteSubdirectoriesAndFiles*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">DeleteSubdirectoriesAndFiles:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ExecuteFile*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ExecuteFile:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ListDirectory*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ListDirectory:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadAndExecute*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadAndExecute:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadData*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadData:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadExtendedAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadExtendedAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*ReadPermissions*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">ReadPermissions:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*TakeOwnership*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">TakeOwnership:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Synchronize*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Synchronize:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Traverse*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Traverse:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*Write*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">Write:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*WriteAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">WriteAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*WriteData*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">WriteData:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                "*WriteExtendedAttributes*" { if ($p -ne $null) {echo "<tr align="left"><td width="10%">WriteExtendedAttributes:</td><td width="90%">$p</td></tr>" | out-file $report -append}}
                                }
                        }       
                        #>
                }
                       
                        #dadac pozostrałe
                        get-perm('*FullControl*')
                        get-perm('*Modify*')                       
                        get-perm('*Read*')       
                        get-perm('*Delete*')                       
                        get-perm("*AppendData*" )
                        get-perm("*ChangePermissions*" )
                        get-perm("*CreateDirectories*" )
                        get-perm("*CreateFiles*" )
                        get-perm("*DeleteSubdirectoriesAndFiles*" )
                        get-perm("*ExecuteFile*" )
                        get-perm("*ListDirectory*" )
                        get-perm("*ReadAndExecute*" )
                        get-perm("*ReadAttributes*" )
                        get-perm("*ReadData*" )
                        get-perm("*ReadExtendedAttributes*")
                        get-perm("*ReadPermissions*" )
                        get-perm("*TakeOwnership*" )
                #        get-perm("*Synchronize*" )
                        get-perm("*Traverse*" )
                        get-perm("*Write*" )
                        get-perm("*WriteAttributes*" )
                        get-perm("*WriteData*" )
                        get-perm("*WriteExtendedAttributes*" )
                        }
}

echo  "</table>" | Out-File $report -Append

$end = Get-Date
$genTime = $end - $start

echo "Czas generowania: $genTime" | Out-File $report -Append


# Tworzenie Legendy




echo "<br><br><br><table border="1">" | Out-File $report -Append
echo "<tr> <th BGCOLOR='rgb(240,240,240)' colspan="2">"  | Out-File $report -Append
echo "Legenda </th> </tr>"  | Out-File $report -Append
echo "<tr align="left"><td >DOMAIN\User</td><td>uprawnienia przyznane (Allow)</td></tr>" | out-file $report -append
echo "<tr align="left"><td ><font color="blue">DOMAIN\User</font></td><td>uprawnienia dziedziczone</td></tr>" | out-file $report -append
echo "<tr ><td align="center" ><font color="red">(-)</font></td><td align="left">Brak uprawnień (Deny)</td></tr>" | out-file $report -append
echo "</table>" | Out-File $report -Append


ii $report



спотык
Н
Код:

евозможно вызвать метод для выражения со значением NULL.
D:\bat\ps1\audit.ps1:6 знак:4
+            $acl.Access.GetEnumerator() | where {$_.IdentityReference ...
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull


Kazun 31-01-2018 23:36 2794922

\\?\ - синтаксис не поддерживается в PowerShell,как для локальных, так и для UNC путей

Качайте модуль, где нет проблем с длинными путями - https://gallery.technet.microsoft.co...f-90dbb2b84e85

Или установить:
Код:

PS > Find-Module NTFSSecurity

Version    Name                                Repository
-------    ----                                ----------
4.2.3      NTFSSecurity                        PSGallery

PS > Install-Module NTFSSecurity

Список команд:
Код:

PS > get-command -module NTFSSecurity

CommandType    Name                                              Version    Source
-----------    ----                                              -------    ------
Cmdlet          Add-NTFSAccess                                    4.2.3      NTFSSecurit
Cmdlet          Add-NTFSAudit                                      4.2.3      NTFSSecurit


Elven 01-02-2018 11:22 2795005

Kazun, спасибо. Но локально все почему-то отрабатывало, причем именно с длинным путем (больше 500 символов). Что же, буду колупать NTFSSecurity.


Время: 21:33.

Время: 21:33.
© OSzone.net 2001-