我一直在尽最大努力更加熟悉 PowerShell,将其作为自动化许多常规任务的一种方式,以努力消除人为错误。我支持基于 Web 的应用程序,我当前的目标是创建一个脚本以将应用程序从一台服务器迁移到另一台服务器。到目前为止,我已经获得了在新服务器上安装应用程序的脚本,从旧服务器复制配置文件,并在进行任何其他更改之前备份所有文件。我需要做的最后一件事是搜索配置目录和所有子文件夹以替换主机名、IP 地址和目录位置的所有实例(如果新服务器上的驱动器盘符发生更改)有一个文件夹名为 X:\Website\Tools\Database\Upgrade,其中包含客户曾经使用过的每个版本的文件夹,并且该文件夹中包含数据库升级脚本。我无权更改此文件夹中的任何内容,坦率地说,我也不想更改 X:\Website\tools 中的任何内容。
我将这部分脚本编写如下:
#Replace all instances of hostname, IP address, and drive letter
$path = "\\$newip\$newdriveletter$\Website"
$exclude = @("$path\tools\*")
$files = get-childitem $path\*.* -recurse -exclude $exclude
$files | %{
(gc $_) -replace $oldhost, $newhost -replace $oldip, $newip -replace
"${olddriveletter}:\Website", "${newDriveLetter}:\Website" | set-content
$_.fullname
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,它会替换我想要它替换的所有内容,但它仍然抛出以下错误:
gc : Access to the path
'\\10.5.17.60\E$\Website\Tools\Database\Upgrade\6.2.0' is denied.
At C:\Folder\Powershell\Migrate.ps1:72 char:6
+ (gc $_) -replace $oldhost, $newhost -replace $oldip, $newip -repl ...
+ ~~~~~
+ CategoryInfo : PermissionDenied: …Run Code Online (Sandbox Code Playgroud) 因此,我正在尝试编写一个快速脚本来帮助我儿子学习拼字比赛。我几乎一切正常,但我想跟踪他的结果,所以我尝试将输出写入文本文件。我只关心最近的结果,所以当他开始测试时我删除了现有的结果文件。
我正在为每个人的拼写列表做一个,在每个列表的末尾,我有:
write-host "Word $counter - You spelled $wordcorrectly!!" | Out-File $outputpath -Append
Run Code Online (Sandbox Code Playgroud)
或者
write-host "Word $counter - Sorry. The correct spelling is $word." | Out-File $outputpath -Append
Run Code Online (Sandbox Code Playgroud)
最后,在浏览完所有列表后,我得到:
write-host "You answered $counter out of $WordCount correctly" | Out-File $outputpath -Append
Run Code Online (Sandbox Code Playgroud)
但是当我转到 $outputpath 文件时,它完全是空白的......猜猜我在这里犯了什么简单的错误?
我在 C:\Folder 有一个文件夹,其中包含文件 input.xml、output.xml 和 licensegenerator.exe。Licensegenerator.exe 获取我们放入 input.xml 的变量,并使用 output.xml 文件为我们的程序之一创建临时许可证。我们通常通过命令行导航到 C:\Folder 目录,然后运行以下命令:
LicenseGenerator.exe "C:\Folder\input.xml" "C:\Folder\output.xml"
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个脚本来在 PowerShell 中执行完全相同的操作,但我正在努力……这是我所拥有的:
$inputtest = "C:\Folder\Input.xml"
$outputtest = "C:\Folder\Output.xml"
$licensegen = "C:\Folder\LicenseGenerator.exe"
Invoke-Command $licensegen "$inputtest" "$outputtest"
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到错误:
调用命令:找不到接受参数的位置参数
'C:\Folder\Output.xml'。
在行:5 字符:1
+ 调用命令 $licengegen "$inputtest" "$outputtest"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~
+ CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
+ FullQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeCommandCommand
我也试过运行,Invoke-Expression但得到完全相同的错误(除了开头说“调用表达式”)。有人知道我在这里做错了什么吗?
我正在尝试使用 PowerShell 查找我的应用程序池设置在我的服务器上回收的具体时间。我知道它设置为每天凌晨 1 点在我正在查看的测试服务器上回收。我在跑:
Get-ItemProperty -Path IIS:\AppPools\AppPool -Name recycling.periodicRestart.time
Run Code Online (Sandbox Code Playgroud)
显示的值为 00:00:00
出于测试目的,我尝试运行:
Set-ItemProperty -Path IIS:\AppPools\AppPool -Name recycling.periodicRestart.time -Value 3.00:00:00
Run Code Online (Sandbox Code Playgroud)
我检查了一下这是如何改变的。“特定时间”字段仍显示为凌晨 1:00,但现在“常规时间间隔(以分钟为单位)”设置为 4320 分钟。所以显然我正在寻找错误的值...知道如何才能看到“特定时间”字段中的值吗?
我目前在SQL Server配置管理器中显示TCP端口显示为空白.我需要弄清楚如何使用PowerShell将其更改为端口1433.我已经能够运行它来实际获取值:
$smo = 'Microsoft.SqlServer.Management.Smo.'
$wmi = new-object ($smo + 'Wmi.ManagedComputer')
$uri = "ManagedComputer[@Name='" + (get-item env:\computername).Value +
"']/ServerInstance[@Name='SQLSERVER']/ServerProtocol[@Name='Tcp']"
$Np = $wmi.GetSmoObject($uri)
$NPProp = $Np.IPAddresses.where({$_.Name -eq 'IPALL'})
$NPPropTCP = $NPProp.IPAddressProperties.where({$_.Name -eq 'TcpPort'})
$NPPropTCP.Value
Run Code Online (Sandbox Code Playgroud)
但是,当我跑:
$NPPropTCP[1].Value = '1433'
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
无法在此对象上找到属性"值".验证该属性是否存在且可以设置.
在行:20 char:1
+ $ NPPropTCP [1] .Value ='1433'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo :InvalidOperation:(:) [],
ParentContainsErrorRecordException
+ FullyQualifiedErrorId:PropertyNotFound
我觉得这可能很简单,但我被困了......
我正在尝试创建一个 powershell 脚本,以允许我的孩子在需要时从他们的 Windows 计算机重新启动我的 Raspberry Pi。我已经测试了所有内容并使其正常工作,但唯一的问题是它提示输入用户名和密码。我意识到正在做的事情是:
New-SSHSession -ComputerName "myPi" -Credential (Get-Credential)
Run Code Online (Sandbox Code Playgroud)
我已经进行了一些搜索,但我似乎无法弄清楚是否可以替换“(Get-Credential)”部分以自动输入用户名/密码。
是的,我知道安全风险。它们对 Windows 机器的破坏可能比在 Pi 上造成的破坏要大得多,而且 Pi 上的设置很容易恢复,所以我不用担心。
powershell ×6
append ×1
credentials ×1
iis ×1
output ×1
passwords ×1
recycle ×1
sql ×1
time ×1