如何仅使用powershell

时间:2018-05-16 12:17:04

标签: powershell

下面的代码将数据库从一个位置移动到另一个位置:

$filters = Get-Content "c:\customerName.txt"
$source = "\\Server1\Databases"
$destination = "\\Server2\Databases"

    foreach($filter in $filters)
        {
        Get-Childitem $source -include *.* -Recurse`
        | ? {!$_.PsIsContainer -and $_.fullname -match $filter} `
        | % { 

    Move-Item  $_.FullName -Destination $destination"\$filter" 
        }
    } 

代码工作正常,但我需要更改它,以便它不会从特定文件夹中移动文件,即\\Server1\Databases\AMG

所以我尝试编辑上面的代码如下:

foreach($filter in $filters)
    {
    Get-Childitem $source -include *.* -Recurse | where {$_.source -notlike *"\\Server1\Databases\AMG"*} `
    | ? {!$_.PsIsContainer -and $_.fullname -match $filter} `
    | % { 

Move-Item  $_.FullName -Destination $destination"\$filter" 
    }
}

但如果我运行代码,它会移动所有内容,包括\\Server1\Databases\AMG

中的内容

如何修复此代码才能正常工作?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要更改:

Get-Childitem $source -include *.* -Recurse | where {$_.source -notlike *"\\Server1\Databases\AMG"*}

要:

Get-Childitem $source -include *.* -Recurse | where {$_.fullname -notlike "*\\Server1\Databases\AMG*"}
  • .source未返回Get-Childitem个属性。相反,您可以使用.fullname,这是每个文件或文件夹的完整路径。
  • 您应该将*通配符放在引号内。
相关问题