Единственное правдоподобное объяснение состоит в том, что в вашем файле скрипта есть невидимые управляющие символы до $audio
.
Если ваша строка действительно начинается с $audio = ...
, это будет интерпретировано как присвоение , как и предполагалось;вместо этого то, что выглядит как $audio
, интерпретируется как имя команды , что означает, что $
на самом деле не является первым символом.
Выможет воспроизвести проблему следующим образом:
[char] 0x200b + '$audio = Get-AudioDevice -playback' > t.ps1
./t.ps1
Выше приведена ошибка, которую вы видели из-за невидимого управляющего символа U+200B
( ZERO WIDTH SPACE )) перед $audio
.
Хотя этот конкретный управляющий символ является лишь примером, вы можете проверить фактические символы в первой строке вашего скрипта следующим образом:
& {
[int[]] [char[]] $Args[0] | % { '0x{0:x} [{1}]' -f $_, [char] $_ }
} (get-content D:\audiochanger.ps1)[0]
Решение состоит в том, чтобы удалить невидимые символы;следующие могут работать, в зависимости от того, какие символы на самом деле присутствуют в вашем случае:
(Get-Content D:\audiochanger.ps1) -replace '\p{Cf}' > D:\audiochanger.CleanedUp.ps1
Regex \p{Cf}
соответствует всем экземплярам невидимых управляющих символов.