我编写了一个 PowerShell 脚本,用于压缩文件夹的内容并将其发送到服务器进行备份。问题是复制过程不会等待 zip 过程完成。我尝试使用Out-Nulland Wait-Process,但似乎没有任何效果。 Out-Null只是不做任何事情,并Wait-Process告诉我不存在这样的过程。我似乎无法弄清楚 Windows 压缩的进程名称。任何帮助将不胜感激。下面是我想暂停直到完成的代码部分。
function out-zip {
Param([string]$path)
if (-not $path.EndsWith('.zip')) {$path += '.zip'}
if (-not (test-path $path)) {
set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
}
$ZipFile = (new-object -com shell.application).NameSpace($path)
$input | foreach {$zipfile.CopyHere($_.fullname)}
}
gi "C:\File-Backups\Share1" | out-zip C:\File-Backups\transfer\PC1-Backup
Run Code Online (Sandbox Code Playgroud)
我需要一个脚本来更改我所有的广告用户电子邮件联系字段信息。格式将为“SAMAccountName + @domain.com”。我是一个 powershell 菜鸟,需要一些语法方面的帮助。任何帮助,将不胜感激。
我需要列出 AD 中在 NAME 字段中没有任何条目的所有用户(例如:smith,jon)
到目前为止,我有类似下面的内容
Get-ADUser -filter {Name -eq " "} | FT SamAccountName
Run Code Online (Sandbox Code Playgroud)
我知道这会因为空引用而失败。
基本上我需要一段代码“列出所有具有空白名称字段的用户”
如果有另一种方法可以通过 PowerShell 执行此操作,或者如果我尝试使用空白引号稍微偏离了轨道,请告诉我。
任何帮助表示赞赏。
我正在尝试编写一个脚本,每小时从我们所有的域控制器收集安全日志并远程存储它们;我可以收集安全日志,但是有没有办法按类别或事件编号从 DC 收集安全日志?如果有任何其他问题,请告诉我。
我的代码:
$Eventlogs = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $computer
Foreach($log in $EventLogs)
{
if($Log.LogFileName -eq "Security")
{
$Now = [DateTime]::Now
$FileName = "Security" +"_"+$Now.Month+$Now.Day+$Now.Year+"_"+$Now.Hour+$Now.Minute+$Now.Second
$path = "\\{0}\c$\LogFolder\$folder\$FileName.evt" -f $Computer
$ErrBackup = ($log.BackupEventLog($path)).ReturnValue
if($clear)
{
if($ErrBackup -ne 0)
{
"Backup failed"
"Backup Error was " + $ErrBackup
}
}
}
}
Copy-EventLogsToArchive -path $path -Folder $Folder
}
Run Code Online (Sandbox Code Playgroud) powershell active-directory windows-event-log windows-server-2003-r2
我很困惑,为什么根据我尝试从哪里检索信息,我有不同的信息。我有 3 个运行 Hyper-V 的 Windows 2012 服务器(G0、G1 和 G2)。以下情况是从我用来运行脚本并控制其他服务器的一台服务器中捕获的。
我想要做的是获取这 3 台机器上存在的虚拟机列表:
使用PowerGUI和PowerShell ISE:
PS > Get-VMHost | select name
Name
----
G0.nothing.com
G2.nothing.com
G1.nothing.com
PS > Get-VMHost | Get-VM | select name
Name
----
VM1628856-4
VM1628856-2
VM1628856-6
VM1628856-3
VM1628856-1
VM1628856-5
Run Code Online (Sandbox Code Playgroud)
使用PowerShell:
PS > Get-VMHost | select name
Name
----
G0
PS > Get-VM
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
VM1107610-1 OffCritical 0 0 00:00:00 Cannot connect …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个脚本来显示我域中的所有机器、主机名和操作系统版本。我找到了一些脚本,但是我找到的脚本中没有一个可以同时执行这两项操作。
这是我发现的一个例子:
$strCategory = "computer"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = ("(objectCategory=$strCategory)")
$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults)
{$objComputer = $objResult.Properties; $objComputer.name}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何为powershell创建一个脚本来列出主机名和操作系统版本吗?
我想组合这些命令Get-user,get-casmailbox以便我可以从第一个输出中获取“公司”,并将后者中的“ActiveSyncStatus”合并到一个输出中。
我也明白我可以编写一个显式循环来生成所需的结果,但我认为使用 $_ 可以实现更紧凑的语法。命令(或类似)
有人可以向我展示演示使用 $_ 提供第二个命令的 Get-CasMailbox 的命令吗?属性,最后在命令之间做了一些属性组合的选择对象?
我问的原因是因为我经常必须以这种方式连接命令,而且 for 循环是明确的,而且帮助台难以复制和粘贴。我宁愿有一个可以粘贴的命令行。
我在 IIS 7.5 上这样做:
创建一个应用程序池“testpool”,并将用户名和密码设置为与 AD 中存在的用户名和密码相匹配。然后以管理员身份在 powershell 中:
Import-Module webadministrationcd IIS:\AppPoolsGet-ItemProperty "testpool" -name "processmodel.username"它给了我正确的用户名。然后:
Set-ItemProperty "testpool" -name "processmodel.username" -value "mydomain\anotheruser"Get-ItemProperty "testpool" -name "processmodel.username"它给了我新的用户名 mydomain\anotheruser。但是,在 IIS 8 上,最后一行仍然给了我旧的用户名,但它上面的行不会导致错误。
编辑:
我们正在创建用于配置我们所有网络服务器的脚本。如果在编写脚本时无法设置用户名,那会很烦人。
我已经在许多 IIS 7.5 服务器(Windows 2008)上尝试过这个,它们都可以工作。我已经在三台 IIS 8 服务器(Windows 2012)上试过了,但都没有工作。
事实证明,虽然我不能设置用户名,但我可以在 IIS 8 上设置密码:
Set-ItemProperty "testpool" -name "processmodel.password" -value "MyPassword"我有很多机器需要为 GPO 更新启用远程计划任务管理 (RPC)、远程计划任务管理 (RPC-EPMAP) 和 Windows Management Instrumentation (WMI-in)。
我想运行一个 PowerShell 脚本,所以我不必手动执行此操作。但是,我是 powershell 的新手。
当我在机器上手动添加规则时,有没有办法获得 powershell 命令?
编辑:
这是我发现的一种方法:
netsh advfirewall firewall set rule group="Remote Administration" new enable=yes
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes
netsh advfirewall firewall set rule group="Remote Service Management" new enable=yes
netsh advfirewall firewall set rule group="Performance Logs and Alerts" new enable=yes
Netsh advfirewall firewall set rule group="Remote Event Log Management" new enable=yes
Netsh advfirewall firewall set rule group="Remote Scheduled Tasks …Run Code Online (Sandbox Code Playgroud) 我在远程服务器上运行一个基本的 Powershell 脚本,当它运行时,它完全忽略了键盘输入。这是有意的。但是,当您单击 Powershell 窗口中的任意位置时,它会停止输入,直到您通过按键清除暂停。
有什么方法可以强制 Powershell 在脚本运行时完全忽略鼠标输入?我希望它尽可能难以关闭,即。您需要实际单击 X 关闭窗口,或终止进程等。
在命令提示符窗口中运行是可以接受的,但如果可能的话,我宁愿在 Powershell GUI 中运行它。