我正在开发一些使用 Powershell 更新执行各种应用程序的现有计划任务的发布自动化脚本。在我的脚本中,我可以设置应用程序的路径和工作目录,但它似乎没有将更改保存回任务。
function CreateOrUpdateTaskRunner {
param (
[Parameter(Mandatory = $TRUE, Position = 1)][string]$PackageName,
[Parameter(Mandatory = $TRUE, Position = 2)][Version]$Version,
[Parameter(Mandatory = $TRUE, Position = 3)][string]$ReleaseDirectory
)
$taskScheduler = New-Object -ComObject Schedule.Service
$taskScheduler.Connect("localhost")
$taskFolder = $taskScheduler.GetFolder('\')
foreach ($task in $taskFolder.GetTasks(0)) {
# Check each action to see if it references the current package
foreach ($action in $task.Definition.Actions) {
# Ignore actions that do not execute code (e.g. send email, show message)
if ($action.Type -ne 0) {
continue
}
# Ignore …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Get-ADUser 提取选定的用户集。用户属于名称包含非 ASCII 字符的公司,例如“Gåäördet”。不幸的是,我们必须使用 company 属性来完成这个任务,我们还需要它从脚本中工作。
以下在交互式会话中效果很好,但在脚本中执行时不返回任何数据:
$Company = "Gåäördet"
Get-ADUser -Filter "company -eq '$Company'"
Run Code Online (Sandbox Code Playgroud)
我找到了工作但不够可靠的解决方法(有选择错误对象的风险):
# Work-around 1:
$Company = "Gaaordet" # Replace åäö with aao in the variable
Get-ADUser -Filter "company -eq '$Company'" # Matches the company "Gåäördet", but why?
Run Code Online (Sandbox Code Playgroud)
...或者...
# Work-around 2:
$Company = "G...rdets" # Use regex for åäö
Get-ADUser -Filter * -Properties Company | ? Company -match "$Company"
Run Code Online (Sandbox Code Playgroud)
附加说明:字符编码可能不是这里的问题。正如评论中所建议的,我将其放在脚本中。阅读每个 Get-ADUser-line 的注释:
$OutputEncoding = [Console]::OutputEncoding
$Company = "aao"
Get-ADUser -Filter "company -eq '$Company'" # …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试自动构建运行 Windows Server 2012 R2 的 VM。目前的挑战是自动化添加角色和功能。在角色和功能向导中,有一个选项可以导出可在 PowerShell 中运行的 XML 配置文件。
但是,在查看 XML 文件后,我可以看到它特定于它正在运行的服务器 - 它包含诸如“ComputerName”之类的字段。
如果我想运行一个在许多 VM 上安装角色和功能的脚本怎么办?我需要一个通用的配置文件,而不是针对特定计算机进行个性化。
有没有人对这个问题有意见?
我在不允许用户使用本地管理员权限的环境中工作。在所有。这非常好,但如果员工必须具有本地管理员权限才能运行程序或安装需要提升权限的软件,即使只是进行安装,也可能会很痛苦。有一位簿记用户每月从我们的供应商那里收到一张 DVD,其中包含急需的报告。为了查看报告并进行备份,她必须运行 DVD 上的可执行文件。可执行文件需要管理员权限才能安装。因此,自从我来到这里后,每个月我都会运行 .exe,UAC 就会出现,我会提供运行安装程序所需的信息。
如果这是一次性程序,我将使用 Microsoft Application Compatibility Toolkit 噱头绕过 UAC http://www.techrepublic.com/blog/windows-and-office/selectively-disable-uac-for-your-trusted-vista -applications/但是,由于这是每个月寄给她的新 DVD,我需要某种工具,她可以自己用于此操作。
我环顾了 Server Fault,也做了 Google-Fu,但没有发现任何有用的东西。在特殊情况下,我可能是其中之一。
我想用 Poweshell 来制作这个工具。理想情况下,我希望她能够放入 DVD,然后启动 Poweshell 工具(毫无疑问,从她的桌面快捷方式),该工具查看 DVD 驱动器并以本地管理员身份运行 setup.exe 文件,而无需 UAC 提示,无需她提供任何凭据。
目前我所拥有的是一些拼凑起来的垃圾。我不是 Powershell 绝地武士。我是 Poweshell 学徒。我有我需要的一半。我仍然需要存储密码,这样就不必在她每次运行脚本时定义和输入密码。我希望它尽可能流畅和尽可能少的点击。
对于信用,我选择使用本地管理员帐户,因为该密码不会更改。本地管理员帐户将完成工作。我需要将该帐户信息存储在计算机上,以便 Powershell 每次运行脚本时都可以检索该帐户。因此,这需要是路径变量中的加密文件。
# define path to store password and input password
$path = "C:\Users\User\Password folder"
# get the encrypted local admin password from user path
$encpwd = Get-Content $path\admin.bin
# convert admin file to secure string
$passwd = ConvertTo-SecureString $encpwd
# …Run Code Online (Sandbox Code Playgroud) 此问题是对另一个问题Powershell 无法从 Active Directory 检索 pwdLastSet 中的评论的衍生
这是我尝试像这样调用函数的地方:
Get-PwdLastSet('grz')
Run Code Online (Sandbox Code Playgroud)
我收到以下提示,我非常感谢:
...首先,不要使用括号 ( ) 在 PowerShell 中调用函数(它在语法上是有效的,但在语义上是错误的)。执行该函数的正确方法是 Get-PwdLastSet grz ...
我得到它。但我想问 - 为什么会这样?那么括号是什么意思呢?
Set-MpPreference -DisableRealtimeMonitoring禁用第一个,打开 UI 时禁用其他选项的具体开关是什么?我没有在文档中找到一个明确的例子,我不想运行每个禁用开关,因为 MS 文档很糟糕。
我正在尝试找到一种方法来在 Windows 10 IOT 设备上配置永久静态 IP,并拔掉 Nic。我有一个脚本需要在设备到位之前在设备上运行,其中一部分是配置 NIC。当我使用以下内容时:
New-NetIpAddress -InterfaceIndex 10 -IpAddress 192.168.9.10 -PrefixLength 24 -DefaultGateway 192.168.9.1 -AddressFamily IPv4
我收到一个错误
New-NetIpAddress : Inconsistent parameters PolicyStore PersistentStore and Dhcp Enabled
我试图Set-NetIPInterface -InterfaceIndex 10 -Dhcp Disabled在使用 New-NetIpAddress 命令之前显式关闭 DHCP,但我收到了同样的错误。
有什么建议?
我有一个想要安装的 ISO 映像(在本例中为 MS Office ISO)。
我想使用 Powershell,并在安装时指定驱动器号分配,以便我可以对已安装的 ISO(驱动器)上的文件使用脚本命令,之后我想卸载 ISO。
如何才能做到这一点?
背景:我想在给定 ISO 映像的情况下编写 MS Office 的安装脚本。
基本上是标题。我的朋友提供了一个脚本来通过 Powershell 和 PuTTY 批量更改 RHEL 密码,但是当我尝试登录时,我输入的新密码不起作用。我认为问题是它没有转义一个特殊字符在新密码中,但我不知道新密码是什么。
我使用的“新密码”类似于:a1b2c3d"4e5f6g7
我尝试将安全字符串替换为常规字符串,或者使用 telnet 而不是 SSH 与数据包捕获来确定发送的究竟是什么,但到目前为止这些都没有奏效。
System.Management.Automation.PSCredential -argumentlist "root",$newrootPassword
$newrootPassword2 = Read-Host "Retype new root password" -AsSecureString
$newrootCredential2 = new-object -typename System.Management.Automation.PSCredential -argumentlist "root",$newrootPassword2
putty.exe -ssh -pw $oldrootCredential.GetNetworkCredential().Password root@$_
echo y | plink.exe -ssh -v -pw $oldrootCredential.GetNetworkCredential().Password root@$_ "echo root:'$newrootPassword' | chpasswd" 2>&1
Run Code Online (Sandbox Code Playgroud)
我希望新密码是 a1b2c3d"4e5f6g7;但是,这在登录时不起作用。
我知道如果我有 .appx 包文件,我可以使用Add-AppxPackagecmdlet通过 powershell 安装它。但是,我只想按名称下载和安装 Microsoft Store 软件包。
我不想去 Microsoft Store 页面,启动 fiddler,开始下载,捕获 .appx 文件 URL,然后手动下载它以便我可以使用Add-AppxPackage. (在此处查看 Windows 操作系统中心是如何做到的)
这可能很有趣 - 但它会很脆弱。我需要一个强大的可编写脚本的方法来管理 Windows 应用商店应用程序。
(有一些软件包只能通过 Microsoft Store 访问。我可以通过 Chocolatey 或直接下载 msi 获得其他所有内容。)
一个实例中,我还不能脚本是安装的HEIF图像扩展(以查看来自iPhone图像格式需要:*.HEIC格式。
一旦我从 Windows 应用商店安装它,它就会显示 Get-AppxPackage
PS C:\Tools> Get-AppxPackage | Where-Object {$_.Name -eq "Microsoft.HEVCVideoExtension" }
Name : Microsoft.HEVCVideoExtension
Publisher : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture : X64
ResourceId :
Version : 1.0.31053.0
PackageFullName : Microsoft.HEVCVideoExtension_1.0.31053.0_x64__8wekyb3d8bbwe
InstallLocation …Run Code Online (Sandbox Code Playgroud) powershell ×10
automation ×3
windows ×3
windows-10 ×2
iso ×1
linux ×1
mappeddrive ×1
networking ×1
putty ×1
redhat ×1
root ×1
scripting ×1
xml ×1