Загрузка данных


function Get-OpenFilesOnServers {
    <#
    .SYNOPSIS
        Получает информацию об открытых файлах на SMB-шарах указанных серверов.

    .DESCRIPTION
        Функция выполняет командлет Get-SmbOpenFile на каждом сервере из списка
        с помощью Invoke-Command и возвращает сводную таблицу с именем сервера,
        пользователем, компьютером-клиентом, путём к файлу и относительным путём на шаре.

    .PARAMETER ServerNames
        Массив имён или IP-адресов серверов, на которых нужно проверить открытые файлы.

    .PARAMETER Credential
        (Необязательно) Учётные данные для подключения к серверам.

    .EXAMPLE
        Get-OpenFilesOnServers -ServerNames "my-dat-serv1","my-dat-serv2","my-dat-serv3"

    .EXAMPLE
        $servers = "my-dat-serv1","my-dat-serv2","my-dat-serv3"
        Get-OpenFilesOnServers -ServerNames $servers -Credential (Get-Credential)
    #>
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string[]]$ServerNames,

        [Parameter(Mandatory = $false)]
        [System.Management.Automation.PSCredential]$Credential
    )

    $results = foreach ($server in $ServerNames) {
        try {
            $invokeParams = @{
                ComputerName = $server
                ScriptBlock  = {
                    Get-SmbOpenFile |
                        Select-Object @{Name='Server';Expression={$env:COMPUTERNAME}},
                                      ClientUserName,
                                      ClientComputerName,
                                      Path,
                                      ShareRelativePath,
                                      FileId,
                                      SessionId
                }
                ErrorAction  = 'Stop'
            }

            if ($Credential) {
                $invokeParams.Credential = $Credential
            }

            Invoke-Command @invokeParams
        }
        catch {
            Write-Warning "Не удалось получить данные с сервера '$server': $_"
        }
    }

    $results | Sort-Object Server, ClientUserName, Path
}