【发布时间】:2016-08-16 16:59:00
【问题描述】:
我需要更改我的 MySQL 设置中的 my.ini 文件。我想增加max_connections。所以基本上有一个.bat文件,它调用一些powershell命令,替换文件中的文本文件并保存。
我正在尝试通过运行 .bat 文件来执行此操作,该文件将运行 powershell 命令来更改文本,到目前为止,这一直是一个令人头疼的问题。我尝试了几种解决方案,但它要么没有给我替换文本的权限,要么告诉我该对象不能在管道命令中使用。
我设法让它在不使用 .bat 文件的情况下在管理员 powershell 中工作,但它不会让我在非管理员和 .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' -"
并得到以下错误
Set-Content : 输入对象不能绑定到命令的任何参数,因为命令没有 接受管道输入或输入及其属性与接受管道输入的任何参数都不匹配。
我也使用 admin 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 "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\"" } |设置内容 'C:\ProgramData\MySQL\MySQL Server 5.7\my.ini' -\"" 'ForEach-Object' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
我已经查看了几个关于此的堆栈溢出问题,但我似乎无法让它发挥作用。
如果有更简单的方法来完成解决方案,那么我愿意接受建议。
更新:
当我复制并粘贴解决方案或让另一个程序将其传递给 powershell.exe 时,我在命令中得到这些奇怪的方括号,为什么会发生这种情况? (我用innoscript调用powershell.exe)
【问题讨论】:
-
能够在批处理文件中执行此操作应该只是让您的语法正确。试试这个:
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'}。至于不必在 Admin 中运行,请检查文件上的安全选项卡,并确保您的用户帐户有权访问它,而不仅仅是 Administrators 组中的人。 -
我仍然收到错误消息,指出“ForEach-Object”未被识别为内部或外部命令、可运行程序或批处理文件。'
-
为什么不在 PowerShell 而不是批处理文件中运行它?
-
@TheMadTechnician 我会将其切换为 powershell 文件而不是批处理文件
-
@TheMadTechnician 我把它变成了一个被调用的 powershell 命令,但是当我将命令复制并粘贴到 powershell 中时,我在命令中得到了奇怪的 [],你知道是什么原因造成的吗?跨度>
标签: mysql .net powershell batch-file config