Как подставить переменную в путь к файлу (powershell)?
Есть такой небольшой скрипт, он должен из двух .txt файлов брать данные и подставлять их в путь что бы попасть куда нужно.
$pc_number = (Get-Content C:\test\pc_name_stm.txt)
$user_name = (Get-Content C:\test\stm_name.txt)
New-Item -ItemType SymbolicLink -Path \\$pc_number\c$\Users\$user_name\Desktop\Полезные_ссылки_СТМ -Target \\192.168.123.220\Shared\СТМ\Полезные_ссылки_СТМ
Всё отлично работает если я не использую переменные в пути, но когда их ставлю выдаёт ошибку
New-Item : Синтаксическая ошибка в имени файла, имени папки или метке тома
C:\test\test1 — копия.ps1:3 знак:1
+ New-Item -ItemType SymbolicLink -Path \\$pc_number\c$\Users\$user_nam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-Item], Win32Exception
+ FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.NewItemCommand
Подскажите, с чем связано?
Попробуйте вывести собранный из переменных путь на экран - увидите, где что теряется.
Скорее всего вам нужно складывать в одну тестовую строку значение переменных и простой текст - для этого их надо складывать оператором типа "." - как минимум так работает в линуксах, может powershell тоже так обрабатывает строки
Спасибо! Нашёл ошибку через echo, в .txt файле оставались пробелы лишние.
Только теперь другой вопрос образовался :D
Как сделать что бы переменные из .txt подставлялись поочерёдно, а не все подряд
IT_Otdel, А вы гарантируете что строка № 111 из первого файла точно соответствует строке № 111 из второго ?
как ?
Это наводящий вопрос к тому, что может, если у вас источник файлов один, надо сразу в источнике данные вместе склеивать, чтобы проще получилось. и через csv, например, обмениваться этой инфой, а не двумя отдельными файлами ?
MaxKozlov, склеить данные в 1 файле звучит проще и логичнее, но я этого ещё не делал, не умею. Поэтому создал два разных файла и пытался сделать так. В них всего по +-25 строк и они соответствуют друг другу, проверено вручную
# Создание csv
1..10 | Foreach-Object {
#Здесь будут ваши непонятно откуда полученные значения. у меня это просто цифры
# Ну или делаете его в excel, тогда надо будет обратить внимание на символ разделитель (-Delimiter)
[PSCustomObject]@{
Name = "Name $_"
Description = "Value $_"
}
} | Export-Csv -path d:\test.csv -Encoding utf8
# Чтение и использование
Import-Csv -Path d:\test.csv | Foreach-Object {
#Сюда подставляете нужные вам команды
Write-Host "Для имени $($_.Name) описание $($_.Description)"
}