Помилка в класах PowerShell, коли скрипт знаходиться в папці, що містить одну цитату?


1

Сценарії PowerShell мого клієнта не працюють для нового користувача, у якого є одна цитата в їх назві - це означає, що їхній шлях до профілю називається "C: Користувачі Liam'OReilly". Здається, це помилка в системі класів PowerShell.

Створіть папку "C: Temp" і додайте Test.ps1:

Write-Host "Test"
Class MyClass {}

Виконайте цей сценарій, і ви отримаєте цю помилку:

Дане ім'я збірки або база кодів недійсна. (Виключення з   HRESULT: 0x80131047) У рядку: 1 символ: 1   + & amp; 'C: Тест   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo: OperationStopped: (:) [], FileLoadException       + FullyQualifiedErrorId: System.IO.FileLoadException

Перейменуйте папку як просто C: Виконайте і вона працює без помилки.

Будь-який користувач отримав обхідний шлях, і який найкращий спосіб повідомити про цю помилку?

Наразі моє обхідне рішення (починаючи з понеділка) полягає в видаленні символу з однією цитатою з їхнього імені в Office 365, яке не ідеально.


Чесно кажучи, найкраще було б видалити одну цитату з імені на доменній стороні. Ви можете зберегти єдину цитату у відображуваному імені, тому єдина зміна - це каталог, створений на комп'ютері, підключеному до домену. В іншому випадку вам доведеться вручну змінити реєстр на кожному пристрої, підключеному до домену, у який вони входять. Що стосується повідомлення про помилку, повідомте про це команді PowerShell Core, виправити її в PowerShell 5.
Ramhound

Подряпайте це. PowerShell 5.1 є останньою (закритою версією) версією. Повідомляючи про це команді Core PowerShell, вона буде врешті-решт виправлена. Необхідно перевірити поточну бета-версію ядра PowerShell, яка не має цієї проблеми (перш ніж повідомити про це)
Ramhound

Thx - в Office 365 / Azure AD мені довелося перейменувати відображуване ім'я на "Liam OReilly", оскільки це, здається, те, що контролює ім'я профілю користувача
munrobasher

Проблема вже була повідомлена і зафіксована до команди PowerShell Core до речі . Я пішов уперед і позначив це як дублікат, оскільки про це було повідомлено, і він посилався на запитання, поставлене тут. Моє припущення полягає в тому, що виправлена ​​проблема, про яку повідомляється, хоча і дещо інша, проблема, яку ви виявили, також буде виправлена.
Ramhound

Відповіді:


0

Пост StackOverflow Як отримати доступ до файлових шляхів у Powershell, що містять спеціальні символи? має три рішення проблеми:

  1. Використовуйте новий символ втечі % до зупиніть нормальний синтаксичний аналіз командного рядка до кінця рядка щоб не збігатися з цитатами, не зупинятися на крапці з комою і не розширювати змінні PowerShell. Змінні середовища все ще розширюються при використанні cmd.exe синтаксис (напр., %TEMP% ).

  2. Запишіть ім'я файлу у тимчасовий файл і використовуйте його звідти.

  3. Використовуйте символ backtick (`), щоб уникнути спеціального символу. Наприклад :

    $dir = "C:\folder`$name\dir"
    

На жаль, тільки один з ваших рішень може бути використаний автором, запускаючи скрипт з іншого каталогу. Не знаючи нічого про сценарій, можливо, це неможливо.
Ramhound

@Ramhound: Це не одна з пропозицій. Чи не могли б ви розширити, чому два з них непридатні?
harrymc

Якщо скрипт містився в папці з однією цитатою, скрипт навіть не запускається, тому, використовуючи змінну або використовуючи символ втечі в скрипті, не вирішить проблему автора.
Ramhound

@Ramhound: Плакат може використовувати сценарій PowerShell, щоб запустити сценарій з однією цитатою, використовуючи один з вищезазначених методів.
harrymc

Можливим є лише запуск із іншої папки, і це важко, оскільки сценарій запускається з папки профілю користувача, у якій є цитата. Можливо, ви зможете скопіювати скрипт в іншу папку, якщо він знайде єдину цитату, але дуже брудну
munrobasher
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.