2016-08-16 63 views
-1

我需要在我的MySQL安装程序中更改my.ini文件。我想增加max_connections。所以基本上有一个.bat文件,它调用一些PowerShell命令来替换文件中的文本文件并保存它。用于更改文件中文本的Windows PowerShell命令

我试图通过运行一个.bat文件来运行powershell命令来更改文本,到目前为止这一直是一个非常头疼的问题。我尝试了几种解决方案,它或者不给我权限来替换文本,或者告诉我该对象不能用于管道命令。

我设法让它在admin powershell中工作而不使用.bat文件,但它不会让我在非管理员和.bat文件中执行此操作。

我想这下面

PowerShell -NoExit -Command "(Get-Content 'C:\ProgramData\MySQL\MySQL Server 5.7\my.ini') | ForEach-Object { $_ -replace \"max_connections=[0-9]+$\", \"max_connections=10000\" } | Set-Content 'C:\ProgramData\MySQL\MySQL Server 5.7\my.ini' -" 

,并出现以下错误

套装内容:输入对象不能被绑定到该命令的任何参数或者因为该命令没有 起飞管道输入或输入及其属性与任何采用管道输入的参数都不匹配。

我自己也尝试这种变化使用管理的PowerShell呼叫

PowerShell -NoExit -Command "Start-Process powershell -verb runas -ArgumentList \"-NoExit -Command (Get-Content 'C:\ProgramData\MySQL\MySQL Server 5.7\my.ini') | ForEach-Object {{ $_ -replace \""max_connections=[0-9]+$\"", \""max_connections=10000\"" } | Set-Content 'C:\ProgramData\MySQL\MySQL Server 5.7\my.ini' -\"" 

,但我得到以下错误

PowerShell的-noexit -Command“开始处理PowerShell的-verb运行方式 - ArgumentList \“ - NoExit -Command(Get-Content'C:\ ProgramData \ MySQL \ MySQL Server 5.7 \ my.ini')| ForEach-Object {{$ _ -replace \“”max_connections = [0-9] + $ \“”,\“”max_connections = 10000 \“”} | Set-Content'C:\ ProgramData \ MySQL \ MySQL Server 5.7 \ my.ini' - \“” 'ForEach-Object'不被识别为内部或外部命令, 可操作程序或批处理文件。

我已经看过几个关于这个堆栈溢出问题,但我似乎无法得到它的工作。

如果有更简单的方法可以完成解决方案,那么我乐于接受建议。

UPDATE:

当我复制并粘贴溶液或获得其他的程序通过它来powershell.exe我得到的命令这些奇怪的方括号,为什么会出现这种情况? (我用innoscript调用powershell.exe)

enter image description here

+0

能够在批处理文件中执行它应该只是让你的语法正确。试试这个:'PowerShell -NoExit -Command {(Get-Content'C:\ ProgramData \ MySQL \ MySQL Server 5.7 \ my。ini')| ForEach-Object {$ _ -replace“max_connections = [0-9] + $”,“max_connections = 10000”} | Set-Content'C:\ ProgramData \ MySQL \ MySQL Server 5.7 \ my.ini'}'。至于不必在管理员中运行,请检查文件上的安全选项卡,并确保您的用户帐户有权使用该帐户,而不仅限于管理员组中的人员。 – TheMadTechnician

+0

我仍然得到错误,指出'ForEach-Object'不被识别为内部或外部命令,可操作程序或批处理文件。' – FillyPajo

+0

为什么不直接在PowerShell而不是批处理文件中运行它? – TheMadTechnician

回答

0

如果能够做到这一点的一个批处理文件应该仅仅是让你的语法正确。试试这个:

PowerShell -NoExit -Command {(Get-Content 'C:\ProgramData\MySQ‌​L\MySQL Server 5.7\my.ini') | ForEach-Object { $_ -replace "max_connections=[0-‌​9]+$", "max_connections=100‌​00" } | Set-Content 'C:\ProgramData\MySQ‌​L\MySQL Server 5.7\my.ini'} 

至于不必在管理运行,请检查您的文件安全选项卡,并确保您的用户帐户有权它,而不仅仅是人们的管理员小组。

相关问题