hostname
на самом деле hostname.exe
, то есть это не собственная команда, которая интерпретируется оболочкой, а внешняя команда, которая вызывается.
Вы можете назначить вывод переменной как обычно:
$hostname = hostname.exe
Затем вы можете построить строку запроса следующим образом
$query ="BACKUP DATABASE [my_db] TO DISK = N'\\$hostname\Backup\test\DB\my_db.bak' WITH NOFORMAT, NOINIT, NAME = N'my_db Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION"
или с оператором -f
$query = "BACKUP DATABASE [my_db] TO DISK = N'\\{0}\Backup\test\DB\my_db.bak' WITH NOFORMAT, NOINIT, NAME = N'my_db Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION" -f $Hostname
Если вы хотите использовать hostname.exe
без вспомогательной переменной, вы можете использовать подвыражение $()
.
$query = "BACKUP DATABASE [my_db] TO DISK = N'\\$(hostname.exe)\Backup\test\DB\my_db.bak' WITH NOFORMAT, NOINIT, NAME = N'my_db Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION"
Ваш пример с ${hostname}
равен $hostname
, который является пустой переменной и не вызывает hostname.exe
.
Однако существуют различные способы получения имени хоста без вызова внешней команды, например:
Переменная среды: $env:COMPUTERNAME
WMI Класс: Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -ExpandProperty Name
Вы можете использовать оба примера, как показано ранее.