заменить строку добавить в powershell - PullRequest
0 голосов
/ 25 января 2020

Привет, ребята, я новичок в PowerShell, у меня есть выходной файл из скрипта, который я создал, чтобы проверить все данные тома (datax) в папке netapp SVM (na0maa-euc01) level3, у которой есть все права доступа и без активные группы безопасности каталогов (должны располагаться в папках уровня 3), поэтому txt-файл outpout выглядит так:

\\na0maa-euc01\data1\Nissan Production Engineering\TC Facility\X11M 
\\na0maa-euc01\data1\Powertrain_DIP-A entry\IQMS\Data
\\na0maa-euc01\data1\Powertrain_DIP-A entry\PROJECT INFORMATION\Data
\\na0maa-euc01\data2\powertrain_emb_ice_algorithm_OLD\Data\05_DCM

те папки уровня 3, куда были скопированы файлы из netapp 7 режима с именем f-typhon-old, были acl все в порядке

\\f-typhon-old\data1\Nissan Production Engineering.mig\TC Facility\X11M
\\f-typhon-old\data1\Powertrain_DIP-A entry.mig\IQMS\Data
\\f-typhon-old\data1\Powertrain_DIP-A entry.mig\PROJECT INFORMATION\Data
\\f-typhon-old\data2\powertrain_emb_ice_algorithm_OLD.mig\Data\05_DCM

, поэтому я создал новый файл с базовой линией, чтобы исправить acl следующим образом:

data1\Nissan Production Engineering\TC Facility\X11M
data1\Powertrain_DIP-A entry\IQMS\Data
data1\Powertrain_DIP-A entry\PROJECT INFORMATION\Data
data2\powertrain_emb_ice_algorithm_OLD.mig\Data\05_DCM

сделал небольшой скрипт с al oop для файла с помощью get- acl и set-acl, чтобы исправить, но проблема в том, что мне нужна текстовая манипуляция для создания переменной $ level3old для хранения в ней пути с .mig в папках level1. Сейчас я не знаю, как это сделать, или, если это было возможно в powershell

$Pth = "C:\temp\mig\mig_CDOT\0INCHE\Log\Robocopy\Extract\acl_user"
$filerd = "na0maa-euc01"
$filers = "f-typhon-old"
$N3 = gc $pth\N3_witheveryoneacess_base.txt

foreach ($level3 in $N3) {
    $level3old = how too replace datax\level1\level2\level3 with datax\level1.mig\level2\level3
    get-acl "\\$filers\$level3old " | set-acl "\\$filerd\$level3"
}

1 Ответ

1 голос
/ 25 января 2020

Я не совсем уверен, что ваши переменные всегда содержат. Поэтому я приведу несколько примеров.

Предполагается, что $level3 содержит имя сервера, а не .mig

$level3 = '\\na0maa-euc01\data1\Nissan Production Engineering\TC Facility\X11M'
$level3old = $level3 -replace '^\\\\.*?\\(.*?\\[^\\]+)','$1.mig'

# Output
$level3old
data1\Nissan Production Engineering.mig\TC Facility\X11M

Предполагается, что $level3 начинается с Общая папка не содержит .mig

$level3 = 'data1\Nissan Production Engineering\TC Facility\X11M'
$level3old = $level3 -replace '^.*?\\[^\\]+','$&.mig'

# Output
$level3old
data1\Nissan Production Engineering.mig\TC Facility\X11M

Объяснение:

-replace использует сопоставление с регулярным выражением, за которым следует замена строки (с некоторым совпадением Ссылки). Поскольку \ является специальным символом регулярного выражения, его необходимо экранировать sh для буквального совпадения. Таким образом, чтобы соответствовать \, вам нужно \\. Чтобы соответствовать \\, вам нужно \\\\, то есть один \ escape для каждого литерала \.

Инициал ^ соответствует началу строки. Это первое возможное место для начала сопоставления строки.

.*? лениво сопоставляет любые символы. Это обычно продолжает сопоставление, пока не достигнет другого условия сопоставления. Таким образом, .*?\\ будет соответствовать любому символу вплоть до следующего включительно \.

[^] - класс символов отрицания. Все, что следует за ^ в пределах [], означает что-либо, кроме этих символов. [^\\] соответствует всему, кроме \.

+ соответствует одному или нескольким предыдущим матчам. [^\\]+ соответствует всему, кроме \ один или несколько раз.

В строке замены $1 относится к сопоставленным символам в группе захвата 1. В части регулярного выражения () обозначает группу захвата , При первом открытии ( начинается группа захвата, которой присваивается имя 1. Если вы не указали ее явно.

В строке замены $& относится к каждому сопоставленному символу. $0 также может быть использовано, потому что по умолчанию все совпадение захватывает группу 0.

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