我有一个运行 Windows 2012 R2 的应用程序服务器,它生成大量日志文件,以至于它半定期运行应用程序卷的可用空间不足。由于应用程序本身的限制,我无法移动或重命名日志文件或启用 NTFS 重复数据删除,并且由于它不再是十年前,我不想使用批处理或 vbscript 来执行此操作为了我。
日志文件都在应用程序安装目录的各个子文件夹中,扩展名不同(一个组件添加日期作为日志文件扩展名),应用程序安装目录中有一个空格,因为应用程序开发人员是恶意的。写入日志的子文件夹至少专门用于写入日志。这也是一个严重受 CPU 限制的应用程序,因此我不想压缩日志文件夹本身并导致与为日志写入压缩文件相关的 CPU 损失。
如何使用 PowerShell 对超过 x 天的日志文件启用 NTFS 压缩,就地?
windows powershell ntfs windows-server-2012-r2 powershell-v4.0
在我被击落之前,我知道如何安排任务、使用 powershell 重新启动服务或授予非管理员帐户重新启动服务的权限。那不是问题。然而,问题是所有这三个任务的组合。
我有一个 Windows 服务需要处理网络文件夹上的文件。因此,它使用“服务帐户”登录,该帐户实际上只是一个普通的域帐户。此域帐户不是管理员,但具有对该文件夹的访问权限。该服务运行良好,并完成它的工作。
但是,有时某个文件中的错误会阻止处理其他文件。通常需要一段时间才能有人注意到并且有一些积压。
因此,我在 powershell 中创建了一个监控脚本,用于轮询网络文件夹中的这些错误文件。如果找到,文件将移动到临时文件夹以供查看,并且需要重新启动服务。
我通过组策略授予服务帐户权限来启动和停止服务。
当我使用服务帐户登录到服务器时,我可以使用服务 MMC 手动重新启动服务。我还能够执行 powershell 脚本,它完全按照预期执行:轮询文件夹、移动文件并重新启动服务。伟大的!
在下一阶段,我创建了一个每 10 分钟运行一次的计划任务。该任务使用与服务相同的服务帐户来执行 powershell 脚本。选中“以最高权限执行”框。就像我说的,powershell 脚本需要访问网络驱动器,所以我不能以本地服务器管理员的身份运行它,我不想使用域管理员凭据来执行这样的琐碎任务。(我尽量实现最小特权原则。)
我使用本地安全策略 MMC 在本地服务器上为服务帐户提供了“作为批处理作业登录”的权限。
现在对于我无法弄清楚的部分:在预定时间计划任务成功完成并且正在执行 powershell 脚本。脚本轮询文件夹并移动错误文件。唯一不起作用的是重新启动服务......?!同样,手动运行脚本,因为同一用户工作得很好。
我在事件查看器中看不到太多内容,但是我的脚本上的日志指出了这个错误:
TerminationError(Stop-Service): “无法在计算机 '.' 上打开服务控制管理器。此操作可能需要其他权限。”
我用来重启服务的命令是:
Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])
Run Code Online (Sandbox Code Playgroud)
(我在 2008 R2 域上使用 Windows Server 2012 R2 和 powershell 版本 4。)
更新: 我都试过,可以通过使用SUBINACL用户的服务权限(如描述这里)和手动设置SDDL字符串(如描述在这里),所以我的控制标志是这样的(A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)。我还尝试在 GPO 中将该服务的权限设置为完全控制。这些都没有解决问题。这一定是我仍然忽略的某个地方的特权问题,因为当我使用服务器上的本地管理员域帐户安排任务时,它工作得很好。
powershell service-accounts scheduled-task service windows-server-2012-r2
我有两台带有 Server 2016 Datacenter 的主机
在每台主机上,我有 2 个当前使用共享存储的虚拟机开发
我可以做所有集群的事情,即实时迁移、移动存储、
我一直在谷歌上寻找能够同时保存集群中所有虚拟机的脚本。
如果我运行这个:
$clusterNodes = Get-ClusterNode;
$Name = ForEach($item in $clusterNodes){Get-VM -ComputerName $item.Name; }
{save-VM -ComputerName $item.Name; }
Run Code Online (Sandbox Code Playgroud)
它将保存虚拟机,但是它会为每个主机提示我两次输入虚拟机的名称。
我的总体目标是能够从一台 PC 重新配置集群中的所有 VM,而且 vm 经常移动,因此它们并不总是在同一台主机上。
例子:
保存所有虚拟机
关闭 os 共享存储:
Set-VM pv02 -SnapshotFileLocation C:\ClusterStorage\Volume1\pv02
Set-VM pv02 -SmartPagingFilePath C:\ClusterStorage\Volume1\pv02
Set-VMHardDiskDrive -VMName pv02 -ControllerType SCSI -Path C:\ClusterStorage\Volume1\pv02\pv02.vhdx
Run Code Online (Sandbox Code Playgroud)
启动虚拟机
如果我单独登录每个主机,该命令将运行良好,但是在我的生产中,我有 7 个主机,大约有 100 个虚拟机。
我们有两个 IIS 8.5 Web 服务器,Server 2012 R2
服务器 1
服务器2
我正在尝试找到一个 powershell 命令,该命令只会将 Server1 上所做的更改同步到 Server2
我尝试了共享配置,但是它也会同步绑定,我不希望那样做,因为它们是负载平衡的。此外,我试图避免向服务器添加不需要的绑定以使其工作。
我发现了几个 webdeploy powershell 命令,但是看起来它也想同步文件,我们使用 DFS 来同步文件。
我想要做的就是将 Server1 applicationhost.config 或 web.config 的更改同步到 Server2
在 Windows 10 上启动 PowerShell 7。
PowerShell 7.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
Warning: PowerShell detected that you might be using a screen reader and has disabled PSReadLine for compatibility purposes. If you want to re-enable it, run 'Import-Module PSReadLine'.
Run Code Online (Sandbox Code Playgroud)
PowerShell 启动时不显示警告,因为我没有使用屏幕阅读器。
运行指定的命令Import-Module PSReadLine。自从我第一次想了解为什么会出现警告以来,我就没有运行过它。
$PSVersionTable 输出:Name Value
---- -----
PSVersion 7.0.0
PSEdition Core
GitCommitId 7.0.0
OS Microsoft Windows 10.0.18362
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, …Run Code Online (Sandbox Code Playgroud) 我在服务器 2008sysocmgr中的 Windows XP 中编写了脚本servermanagercmd,现在我发现我必须使用新的 PowerShell 模块servermanager在 Server 2008 R2 上安装功能,所以我希望我会在 Windows 7 中使用相同的模块,但事实并非如此那里。
如何在 Windows 7 中使用命令行或 PowerShell 安装 Windows 功能?
我如何找出(在 Powershell 中)哪个进程/任何使用最多内存的进程?
编辑:我试图弄清楚如何使用 Powershell 找出所有物理内存的使用情况,以防任务管理器等无法解释为什么所有物理 RAM 都已用完。即我需要识别缓存等使用的内存。
我想知道如何更改 $profile 变量指向的位置。
PS H:\> $profile
H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Run Code Online (Sandbox Code Playgroud)
H:\ 是网络共享,所以当我创建我的配置文件并加载 powershell 时,我得到以下信息:
安全警告只运行您信任的脚本。虽然来自 Internet 的脚本很有用,但此脚本可能会损害您的计算机。是否要运行 H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1?[D] 不运行 [R] 运行一次 [S] 暂停 [?] 帮助(默认为“D”):
根据微软的说法,$profile 的位置由 %USERPROFILE% 环境变量决定。这不是真的:
PS H:\> $env:userprofile
C:\Users\username
Run Code Online (Sandbox Code Playgroud)
例如,我有一台 XP 机器可以按照我想要的方式工作:
PS H:\> $profile
C:\Documents and Settings\username\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
PS H:\> $env:userprofile
C:\Documents and Settings\username
PS H:\> $env:homedrive
H:
PS H:\> $env:homepath
\
Run Code Online (Sandbox Code Playgroud)
这是 Vista 机器的相同输出,其中 $profile 指向错误的位置:
PS H:\> $profile
H:\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
PS H:\> $env:userprofile
C:\Users\username
PS H:\> $env:homedrive
H:
PS H:\> $env:homepath
\
Run Code Online (Sandbox Code Playgroud)
由于 $profile 实际上不是由 …
我正在尝试向 Exchange 2010 中的一位用户授予“发送身份”权限。这是我正在运行的 Powershell 命令:
Add-ADPermission "User1" -User "Ourdomain\User2" -Extendedrights "Send As"
Run Code Online (Sandbox Code Playgroud)
Powershell 返回此错误:
DC.OurDomain.pri 上的 Active Directory 操作失败。此错误不可重试。附加信息:访问被拒绝。活动目录响应:00000005:SecErr:DSID-031521D0,问题 4003(INSUFF_ACCESS_RIGHTS),数据 0 + CategoryInfo:WriteError:(0:Int32)[Add-ADPermission],ADOperationException +FullyQualifiedErrorId:EDBB94.添加AD权限
我已经尝试了 Powershell 命令的多种替代方法 - 即。使用 -Identity 等,但这和 EMC 向导都返回相同的错误。
我不确定“INSUFF_ACCESS_RIGHTS”是指运行命令的我还是我授予发送权限的用户?
我一直在关注 Microsoft Technet “管理邮箱发送权限”网页:http : //technet.microsoft.com/en-us/library/bb676368.aspx
因此,添加了您需要执行此操作的两个权限:
组织管理
收件人管理
但这无济于事。有任何想法吗?
如果我执行以下操作:
这是有效的,如果我关闭 ADUaC 并再次打开它并重新检查那些新权限,它们仍然存在。如果我在大约 10 分钟后返回,这些权限现在消失了 - user2 根本没有出现在 user1 的安全权限中。
不要以为我以前从未见过这种 AD 行为。
在尝试使用远程处理创建 PowerShell 脚本时,我遇到了我认为的双跳问题。在那篇文章中,Perriman 简要描述了问题以及解决问题的具体步骤(如果您知道命令,那几乎是微不足道的,但对于像我这样不太熟悉的人来说,这些信息非常宝贵!)。
我Enable-WSManCredSSP Server在我的 Win7 服务器上运行Enable-WSManCredSSP Client –DelegateComputer <FQDN of the server>时没有发生任何意外,但尝试在我的 Win7 客户端上运行时产生了这个错误:
Enable-WSManCredSSP : The client cannot connect to the destination specified
in the request. Verify that the service on the destination is running and
is accepting requests.
Consult the logs and documentation for the WS-Management service running
on the destination, most commonly IIS or WinRM. If the destination
is the WinRM service, run the following com mand on the …Run Code Online (Sandbox Code Playgroud)