Wpis z mikrobloga

Siema mirki, jak wykonać w powershellu komendę cmd z wielokrotnie powtórzonym parametrem, którego wartości załadowane są z pliku tekstowego?
Przypadek: chcę przywrócić uprawnienia do folderów, wcześniej jednak odpowiednio mapując stare identyfikatory użytkownika do nowych. Komenda wygląda tak:

icacls 'C:\' /substitute id1_old id1_new /substitute id2_old id2_new /restore 'C:\tmp\perms.txt'
Z pliku muszę załadować wszystkie id, ale ponieważ liczba użytkowników jest zmienna, to cały ten fragment:

/substitute id1_old id1_new /substitute id2_old id2_new
musi być generowany dynamicznie.

Jeżeli podam ten fragment jako jedną zmienną (string), to shell traktuje ten string jako jeden parametr i zwraca błąd.

#powershell #shell #cmd #programowanie #windows
  • 5
  • Odpowiedz
@Koliat: Muszę to zrobić za jednym wywołaniem komendy icacls. Nie mam problemu z wczytaniem parametrów do stringa. Nie wiem jak przekształcić string w ten sposób, aby był traktowany przez powershell/cmd jako oddzielne argumenty. Gdyby icacls to był cmdlet powershellowy, to by nie było problemu, bo on potrafi ładnie wczytać argumenty z arraya.
Wiem, że na szybko mogę potraktować całą komendę jako string, posklejać go i wywołac za pomocą iex $string
  • Odpowiedz
@Koliat:
Wejście to string lub macierz stringów:

user_a old_user_a
user_b old_user_b

Wyjście to prawidłowo odpalona komenda:

icacls 'C:\' /substitute user_a old_user_a /substitute user_b old_user_b /restore 'C:\tmp\perms.txt'
  • Odpowiedz