Powershell скопировать элемент на общий диск с именем пользователя и паролем - PullRequest
0 голосов
/ 21 октября 2019

Я использую сценарий powershell для копирования файлов с локального компьютера в общую сетевую папку

код работает нормально, без проблем, если для общей папки не требуется проверка подлинности. Я не против включить имя пользователя и пароль в код, потому что для пользователей нет никаких ограничений

$folder = 'D:\test'

$destfolder='\\192.168.2.76\ENT'
$filter = '*.AVI'                             

$fsw = New-Object System.IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $true              
NotifyFilter          = [System.IO.NotifyFilters]'FileName, LastWrite'
}

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {



[int]$sleepTime = 500
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated


try {
    # **********check if the file is locked by another process (still being received from the soource)********
    function Test-FileLock {
        param (
            [parameter(Mandatory = $true)][string]$Path
        )

        $oFile = New-Object System.IO.FileInfo $Path

        if ((Test-Path -Path $Path) -eq $false) {
            return $false
        }

        try {
            $oStream = $oFile.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)

            if ($oStream) {
                $oStream.Close()
            }
            $false
        }
        catch {
            # file is locked by another process.

            return $true
        }
    }
    #******** End of Function (test if file is locked) *****************
    # below line : will keep testing if the file is locked ************
    while (Test-FileLock $path) { Start-Sleep 10 }

    # below line: once the file becomes "NOT Locked" , copy the file to the destination folder *******
    Copy-Item  $path  $destfolder -Force -Verbose -PassThru 
}
catch {
    $error|Out-File  -FilePath d:\outlog.txt -Append
    $Error.Clear()
}
}

Я получаю сообщение об ошибке «Отказано в доступе». Буду признателен, если кто-нибудь поможет мне включить имя пользователя и пароль в код.

1 Ответ

0 голосов
/ 21 октября 2019

Добавьте этот параметр в вашу функцию Test-FileLock.

param (
    [ValidateNotNull()]
    [System.Management.Automation.PSCredential]
    [System.Management.Automation.Credential()]
    $Credential = [System.Management.Automation.PSCredential]::Empty
)

Это создаст безопасный объект учетных данных, в котором вы можете хранить свои учетные данные без жесткого кодирования их в своем скрипте. См. Также эту ссылку Как добавить учетные данные в PowerShell .

Затем следует попробовать использовать

Copy-Item -Path $path -Destination $destfolder -Credentials $Credential -Force -Verbose -PassThru

Если это не работает, добавьте полное сообщение об ошибке. и сообщите нам, какая команда нарушает ваш код.

Редактировать

Вы также можете сохранить учетные данные на своем компьютере и затем получить их из диспетчера учетных данных.

  1. Установите и импортируйте Диспетчер учетных данных из PSGallery
Install-Module CredentialManager
Import-Module CredentialManager
Создать новую учетную запись с New-StoredCredential
$cred = New-StoredCredential -UserName TestAccount -Password P@ssw0rd
Вы можете получить учетные данные с помощью
Get-StoredCredentials | where { $_.UserName -eq TestAccount }

Этот объект теперь является типом защищенной строки. Эта и следующая команда (шаг 4) должны быть в вашем сценарии для получения учетных данных и преобразования их в объект PSCredential.

Чтобы создать объект PSCredential, введите:
$credentials = New-Object -TypeName System.Management.Automation.PSCredential($cred.UserName, $cred.Password)

Теперь у вас есть объект PSCredential, который вы сможете использовать для Copy-Item также в качестве сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...