Я написал сценарий PowerShell, который включает проверку наличия invoke-sqlcmd
командлет. Сценарий отлично работает под Windows Server 2016. В 2012 R2 сценарий не работает:
Add-Content : Cannot use interface...
ошибки при попытке создать и записать в файл журнала.
Я обнаружил, что в Windows Server 2012 R2, когда Get-Command invoke-sqlcmd
команда запущена, она меняет мой диск на PS SQLSERVER:\>
вместо того PS C:\>
. По-видимому, это вызывает у меня create
и update
разделы файла журнала для сбоя.
Любая идея, почему Get-Command
изменили бы диск при проверке командлета SQL, и предложения по его обратному изменению или предотвращению в первую очередь? Я знаю, что могу бросить c:
в сценарии, но это кажется слишком простым решением и, возможно, придется делать это после каждого вызова БД.
Я нашел ответ на StackOverflow.
По-видимому, в Windows Server 2012 R2 выполнение любых действий с помощью командлета sql подготавливает среду к запуску в PS SQLSERVER:\>
. Следуя предложению в приведенной выше ссылке, я обернул свои командлеты sql с помощью Push-Location
и Pop-Location
. Кажется, это решило мою проблему.