我们一直在将多个文件服务器迁移到整合的黑匣子解决方案中,并有理由将原始源服务器中的某些文件复制回新解决方案,因为存在从归档中调用这些文件的一些问题(即不经常使用的文件)。
我开始编写代码来识别文件
$v7Kitems = Get-ChildItem $parentpath -force | where {$_.attributes -match "Offline"} | Select FullName, DirectoryName
将信息放入数组中。 UNC的格式为\\new_server\adminshare\old_server\original_drive\original_local_directory_structure\file
。
我希望使用replace选项为旧文件位置创建一个新变量,然后使用Get-Item将文件重新复制,从而拉回“DirectoryName”。
Foreach($item in $v7Kitems){
$source=$item.FullName -replace "\\\\new_server\\adminshare\\","\\" -replace "\\[E-Z]\\","\<original_drive>$\"
}
我不知道在\\[E-Z]\\
的替换部分应该使用什么,因为驱动器号在服务器之间不一致。到此为止的字符串长度是一致的长度。也许我不应该使用RegEx替换,但是在驱动器号的字符编号处捕获字母的其他类型,然后将其作为变量插入替换字符串中?
Overflow的Oracle的想法是什么?
杰夫
答案 0 :(得分:0)
正如Mathias在他的评论中指出的那样,您需要将驱动器号匹配放在捕获组中,这样您就可以用匹配的后向引用替换它,后跟$
字符:
-replace '\\([e-z])\\','\$1$\'
请注意,您需要在替换表达式周围使用单引号,否则PowerShell会在正则表达式引擎查看替换字符串之前将$1
扩展为(空)PowerShell变量。