【问题标题】:PowerShell BitsTransfer use file names from variable as sourcePowerShell BitsTransfer 使用来自变量的文件名作为源
【发布时间】:2018-04-18 00:55:37
【问题描述】:

我是 PowerShell 新手,我使用这个论坛以及其他互联网搜索的答案完成了很多工作,但这个让我变得更好。我有一个脚本,它比较两个文件夹和我遇到问题的部分,我无法让 BitsTransfer 源工作。 $Differences 标识源文件夹中按修改日期不在目标文件夹中的文件。我希望 BitsTransfer 移动由 $Differences 标识的文件,但我没有任何运气来获得这种行为。当我使用“Copy-Item -Path $Differences -Destination $Local –Force”时,该操作有效,但我想要进度条 BitsTransfer 使用。我使用的代码如下

$Local = 'c:\test\local\' 
$Remote = 'c:\test\server\' 
$Target = Get-ChildItem -Path $Local -File 
$Source = Get-ChildItem -Path $Remote -File 

Import-Module BitsTransfer

Set-Location $Remote

filter timestamp {"$(Get-Date -Format g): $_"} 

if ($Target -eq $null) { 
    $bitsjob = Start-BitsTransfer -Source $Remote\*.* -Destination $Local 
    Write-Output "$Local Folder Empty" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt"
    Rename-Item -Path "D:\Mitek\DCS Stuff\Display PC Scripts\test\RemoteComplete.bat" -NewName "Remote.bat"
    Exit
} Else { 

if ($Target -ne $null){
    Compare-Object $Source $Target -Property Name  -PassThru | Where-Object {$_.SideIndicator -eq "=>"} | % {
        if(-not $_.FullName.PSIsContainer) {
            Write-Output "Removed From $Local" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt"
            Remove-Item -Path $_.FullName -Force -ErrorAction SilentlyContinue}}}}

$Differences = Compare-Object -ReferenceObject $Source -DifferenceObject $Target -Property LastWriteTime -PassThru 
$Differences | Group-Object Name | Select -ExpandProperty Group | Sort-Object LastWriteTime | Select-Object -Last 1


if ($Differences -ne $null) { 
       foreach ($file in $Differences) {
        #Copy-Item -Path $Differences -Destination $Local –Force
        Start-BitsTransfer -Source $Differences -Destination $Local
        Write-Output "Copied to $Local" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt"
        Rename-Item -Path "D:\Mitek\DCS Stuff\Display PC Scripts\test\RemoteComplete.bat" -NewName "Remote.bat"}

} Else {

Write-Output "$Local and $Remote are Equal" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt"}`

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我通过一些循环行为解决了问题

    $Local = 'C:\test\local\'
    $Remote = 'C:\test\server\' 
    $Target = Get-ChildItem -Path $Local -File 
    $Source = Get-ChildItem -Path $Remote -File 
    $One = 1 
    
    Set-Location $Remote 
    
    filter timestamp {"$(Get-Date -Format g): $_"} 
    
    if ($Target -eq $null) { 
        $TotalA = $Source | Measure | Select-Object -ExpandProperty Count 
        echo "Total Number of Files to be Copied= $TotalA" 
        echo "---------------------------------------------------------------" 
        Write-Output "$Local Folder Empty" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt" 
        Start-BitsTransfer -Source $Remote\*.* -Destination $Local -Description "Copying $TotalA Files" 
        Rename-Item -Path "C:\test\RemoteComplete.bat" -NewName "Remote.bat" 
        exit 
    
    } Else { 
    
    if ($Target -ne $null){ 
    Compare-Object $Source $Target -Property Name -PassThru | Where-Object {$_.SideIndicator -eq "=>"} | % { 
    
    if(-not $_.FullName.PSIsContainer) { 
        Write-Output "Removed From $Local" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt" 
        Remove-Item -Path $_.FullName -Force -ErrorAction SilentlyContinue}}}} 
    
    $Differences = Compare-Object -ReferenceObject $Source -DifferenceObject $Target -Property LastWriteTime -PassThru 
    
    if ($Differences -ne $null) { 
        $TotalB=$Differences | Group-Object Name | Select -ExpandProperty Group | Sort-Object Name | Measure | Select-Object -ExpandProperty Count 
        echo "Total Number of Files to be Copied= $TotalB" 
        Write-Output "Copied to $Local" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt" 
            do { 
                $Tar = Get-ChildItem -Path $Local -File 
                $Src = Get-ChildItem -Path $Remote -File 
                $Diffs = Compare-Object -ReferenceObject $Src -DifferenceObject $Tar -Property LastWriteTime -PassThru 
                $ListB=$Diffs | Group-Object Name | Select -ExpandProperty Group | Sort-Object Name | Select-Object -First 1 
                    if ($ListB -ne $null) { 
                        echo "---------------------------------------------------------------" 
                        $Rmn=$Diffs | Group-Object Name | Select -ExpandProperty Group | Sort-Object Name | Measure | Select-Object -ExpandProperty Count 
                        $RemainB = $Rmn - $One 
                        Start-BitsTransfer -Source $ListB -Destination $Local -Description "$RemainB Files Remain     Copying - $List" }} 
                Until ($ListB -eq $null) 
        Rename-Item -Path "C:\test\RemoteComplete.bat" -NewName "Remote.bat" 
    
    } Else { 
    
    Write-Output "$Local and $Remote are Equal" | timestamp | Out-File -Encoding Ascii -append "D:\Mitek\DCS Stuff\Display PC Scripts\test\log.txt"} 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      相关资源
      最近更新 更多