Вызов powershell cmdlets от пакетного файла Windows

У меня была такая же проблема, и в конце концов я обнаружил, что это вызвано тем, что CakePhp не признает, что я использовал пользователя с паролем, даже если этот пользователь был создан в PHPMyAdmin. Мне пришлось использовать пользователя root без пароля.

Я узнал об этом после внесения следующих изменений в файл /lib/Cake/Error/exceptions.php .

Исходная строка:

protected 

У меня была такая же проблема, и в конце концов я обнаружил, что это вызвано тем, что CakePhp не признает, что я использовал пользователя с паролем, даже если этот пользователь был создан в PHPMyAdmin. Мне пришлось использовать пользователя root без пароля.

Я узнал об этом после внесения следующих изменений в файл /lib/Cake/Error/exceptions.php .

Исходная строка:

[110]

заменена на эту:

protected 

У меня была такая же проблема, и в конце концов я обнаружил, что это вызвано тем, что CakePhp не признает, что я использовал пользователя с паролем, даже если этот пользователь был создан в PHPMyAdmin. Мне пришлось использовать пользователя root без пароля.

Я узнал об этом после внесения следующих изменений в файл /lib/Cake/Error/exceptions.php .

Исходная строка:

[110]

заменена на эту:

[111]

Это даст вам причину проблемы, чтобы вы могли правильно изменить причину.

messageTemplate = "Database connection \"%s\" is missing, or could not be created:\n %s";

Это даст вам причину проблемы, чтобы вы могли правильно изменить причину.

messageTemplate = 'Database connection "%s" is missing, or could not be created.';

заменена на эту:

protected 

У меня была такая же проблема, и в конце концов я обнаружил, что это вызвано тем, что CakePhp не признает, что я использовал пользователя с паролем, даже если этот пользователь был создан в PHPMyAdmin. Мне пришлось использовать пользователя root без пароля.

Я узнал об этом после внесения следующих изменений в файл /lib/Cake/Error/exceptions.php .

Исходная строка:

[110]

заменена на эту:

[111]

Это даст вам причину проблемы, чтобы вы могли правильно изменить причину.

messageTemplate = "Database connection \"%s\" is missing, or could not be created:\n %s";

Это даст вам причину проблемы, чтобы вы могли правильно изменить причину.

20
задан Uwe Keim 24 March 2019 в 06:41
поделиться

5 ответов

Проблема в файле ps1 - вы объявляете функцию, но не вызываете ее. Я бы изменил его так:

param($path)
function convert-utf8-to-utf16 {   
 $tempfile = "C:\temp.txt"
 set-ExecutionPolicy Unrestricted
 get-content -Path $args[0] -encoding utf8 | out-file $tempfile -encoding Unicode
 set-ExecutionPolicy Restricted
}

convert-utf8-to-utf16 $path

он будет работать. Однако в этом нет необходимости, вы можете просто опустить объявление функции и переместить тело в сам сценарий:

param($path)
$tempfile = "C:\temp.txt"
set-ExecutionPolicy Unrestricted
get-content -Path $path -encoding utf8 | out-file $tempfile -encoding Unicode
set-ExecutionPolicy Restricted
5
ответ дан 29 November 2019 в 23:57
поделиться

Начиная с Powershell версии 2, вы можете запустить сценарий Powershell следующим образом...

powershell -ExecutionPolicy RemoteSigned -File "C:\Path\Script.ps1" "Parameter with spaces" Parameter2

Теперь, если бы я мог только найти способ обработки перетаскивания файлов в сценарий Powershell.

22
ответ дан 29 November 2019 в 23:57
поделиться

У меня это работает ... Файл ps1 не нужно оборачивать в функцию. Только это объявление в порядке.

$tempfile = "C:\temp.txt"  
get-content -Path $args[0] -encoding utf8 | out-file $tempfile -encoding unicode      

и файл bat называет его так:

cd %SystemRoot%\system32\WindowsPowerShell\v1.0
powershell Set-ExecutionPolicy Unrestricted
powershell "& 'C:\convert-utf8-to-utf16.ps1 C:\test.txt' 'C:\test.txt'"
powershell Set-ExecutionPolicy Restricted
pause
1
ответ дан 29 November 2019 в 23:57
поделиться

Try this syntax instead:

cd %SystemRoot%\system32\WindowsPowerShell\v1.0
powershell {Set-ExecutionPolicy Unrestricted}
powershell "& C:\convert-utf8-to-utf16.ps1 C:\test.txt"
powershell {Set-ExecutionPolicy Restricted}
pause
0
ответ дан 29 November 2019 в 23:57
поделиться
# Test-Args.ps1
param($first, $second)
write-host $first
write-host $second

Call from Command Prompt:

PowerShell.exe -NoProfile -Command "& {./Test-Args.ps1 'C:\Folder A\One' 'C:\Folder B\Two'}"

What's confusing is that if the script is in a folder path containing spaces, PowerShell doesn't recognize the script name in quotes:

PowerShell.exe -NoProfile -Command "& {'C:\Folder X\Test-Args.ps1' 'C:\Folder
 A\One' 'C:\Folder B\Two'}"

But you can get around that using something like:

PowerShell.exe -NoProfile -Command "& {set-location 'C:\Folder X';./Test-Args.ps1 'C:\Folder
 A\One' 'C:\Folder B\Two'}"

Don't use spaces in your .PS1 file name, or you're outta luck.

3
ответ дан 29 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: