标签: powershell

在 Powershell 中使用事件日志

我试图分析 Windows 安全日志中的记录,但从某些登录/注销事件中获取特定值时遇到了一些困难。让我们看一个具体的例子——这是其中一个日志条目的 XML。

<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>
    <System>
        <Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-a5ba-3e3b0328c30d}'/>
        <EventID>4634</EventID>
        <Version>0</Version>
        <Level>0</Level>
        <Task>12545</Task>
        <Opcode>0</Opcode>
        <Keywords>0x8020000000000000</Keywords>
        <TimeCreated SystemTime='2011-08-16T17:15:38.702857400Z'/>
        <EventRecordID>107947</EventRecordID>
        <Correlation/>
        <Execution ProcessID='680' ThreadID='972'/>
        <Channel>Security</Channel>
        <Computer>SRV1.DOMAIN.LOCAL</Computer><Security/>
    </System>
    <EventData>
        <Data Name='TargetUserSid'>S-1-5-21-963414502-3093649508-813756320-3274</Data>
        <Data Name='TargetUserName'>billgates</Data>
        <Data Name='TargetDomainName'>MYDOMAIN</Data>
        <Data Name='TargetLogonId'>0x1c01acc</Data>
        <Data Name='LogonType'>10</Data>
    </EventData>
</Event>
Run Code Online (Sandbox Code Playgroud)

例如,我将如何提取0x1c01acc存储在Data节点中的Name属性等于'TargetLogonId'?

powershell xml

3
推荐指数
1
解决办法
6074
查看次数

使用 RDP 列出用户

视窗服务器 2008 R2

我正在尝试使用 PowerShell 获取过去一天登录远程桌面服务(以前称为终端服务)的用户列表。由于很少理解和大量复制和粘贴,我有这个小脚本:

$a = (Get-Date).AddDays(-1)
Get-EventLog -LogName Security -after $a | Where-Object {($_.EventID -eq '4624') -and  $_.EntryType -eq 'SuccessAudit') -and ($_.Message | Select-String "Logon Type:\t\t\t10")}
Run Code Online (Sandbox Code Playgroud)

默认输出告诉我事情已经发生以及它们何时发生,这是一个好的开始。我真正想要的是还显示用户。如果我能弄清楚如何获取用户和/或如何显示它,那该死。

这就是我的问题:如何添加与该事件 ID 4624/登录类型 10 事件关联的用户名?理想情况下,我只想显示登录时间和用户名。

security powershell windows-event-log windows-server-2008-r2

3
推荐指数
1
解决办法
7954
查看次数

用户登录脚本何时运行?

我在活动目录中定义了几个用户登录脚本。这些是批处理脚本以及 powershell 脚本。

这些实际上什么时候运行?用户在登录时看到“黑色终端框”,还是在看到登录屏幕时运行脚本?

编辑澄清:我说的是在 GPO 中定义的登录脚本,我正在运行 Windows Server 2008 R2。

powershell logon-scripts windows-server-2008-r2

3
推荐指数
1
解决办法
2391
查看次数

脚本编写方向

我正在管理一个网络,他们在这里使用了一些脚本。主要是批处理脚本或 vbscript。这是一个 Windows 环境,主要是 Server 2008 和一些 2003 服务器。

我的问题是我应该同时学习 VBscript 和 Powershell 还是只学习 Powershell?

我想学习如何自动执行某些任务,甚至通过 cli 进行管理,但我不确定 Powershell 是否可以代替 VBscript 执行大多数管理任务。

scripting powershell vbscript

3
推荐指数
1
解决办法
165
查看次数

Powershell 到 EC2 实例 - 在 EC2 实例上安装可执行文件

我是亚马逊服务器的新手。我最近创建了一个 EC2 Windows2008 R2 实例,并尝试使用 powershell ALONE 从我的系统连接到该实例

我不想在连接、将文件从本地传输到 EC2 或在 EC2 实例中安装文件时使用 Amazon API。

我想通过使用 POWERSHELL 来完成所有这些。

我能够将文件从本地连接和传输到 EC2,有人可以建议/帮助在此 EC2 实例上安装可执行文件。

对此事的任何帮助深表感谢!提前谢谢

powershell amazon-ec2

3
推荐指数
1
解决办法
2945
查看次数

使用 set-acl 添加的用户权限不会继承到文件和子文件夹

我写了两个 PowerShell 脚本。一个要求用户提供文件夹名称。它创建一个具有该名称的文件夹,赋予用户完全控制权,赋予管理员组完全控制权并剥离继承的权限,只留下用户和管理员。第二个脚本要求输入用户名并在新文件夹中为该用户提供修改权限。

它按预期工作,除了一件事:当我在新创建的文件夹中创建文件或文件夹时,它不会继承这些权限。我查看了安全选项卡,单击了高级和编辑(在帐户上),发现了 2 件事不是我想要的:

  • “应用于”设置为“仅此文件夹”。当我手动将其设置为“此文件夹、子文件夹和文件”时,它按预期工作
  • 用第二个脚本创建的用户有上述情况,权限框“删除子文件夹和文件”没有打勾。

添加帐户围绕以下几行:

$Acl = Get-Acl $Folderpath
$Ar = New-Object system.Security.AccessControl.FileSystemAccessRule($user_account,"FullControl","Allow")
$Acl.Setaccessrule($Ar)
Set-Acl $Folderpath $Acl
Run Code Online (Sandbox Code Playgroud)

$Folderpath是之前设置的指向文件夹的变量。$user_account是先前设置的包含用户帐户名称的变量。

我的问题:

有没有办法将这些帐户正确添加到文件夹权限(权限将被继承,用户具有删除权限)或之后在脚本中更正它?

powershell permissions user-permissions

3
推荐指数
1
解决办法
1万
查看次数

Powershell 和 NMAP 信息共享

我正在从事一个项目,我想为各种项目执行主机文档。这些项目的一部分将来自 Powershell,其余的将来自 NMAP。对于 Powershell 部分,我正在尝试构建一些类似于SYDI-Server 的本土产品项目。它将使用 Powershell 代替 WMI,并允许使用更大、更简单的方法从远程机器获取各种结果。此外,SYDI-Server 项目已经有一段时间没有更新了。NMAP 部分将用于在远程主机上执行一两次扫描并返回结果,以便 Powershell 可以使用或使用这些结果并将它们添加到正在生成的最终报告中。这个想法与报告是从 Powershell 输出的 MS Word 文档类似,该文档包含主机文档所需的所有元素。

说了这么多,有没有办法让数据从 Powershell 共享或来回发送到 NMAP?有没有办法在 Powershell 中使用或解析 NMAP 的结果以进行进一步操作?

scripting powershell documentation nmap

3
推荐指数
1
解决办法
1414
查看次数

如果创建日期大于 7 天,则 Powershell 脚本将删除子文件夹和文件,但保留子文件夹和文件的父文件夹 &lt;7 天

我目前正在使用下面的 Powershell 脚本删除基于创建日期和未修改日期超过 7 天的“$dump_path”的所有文件目录和子目录。

此脚本的问题在于,如果文件夹“A”存在 7(或更多)天,即使其子文件夹和文件的存在时间少于 7 天,它也会被删除。

我希望这个脚本做的是从根目录和“$dump_path”的所有子文件夹中删除所有 7 天或更长时间的文件,但保留少于 7 天的文件和文件夹的父文件夹旧,即使这意味着父文件夹已经超过 7 天。如果所有子文件夹和文件都比父文件夹早 7 天或更早,则可以删除父文件夹。

我知道一个有点晦涩的问题,但目的是在我们共享区域的“沙盒”位置中将所有数据保留 7 天。

此外,如果它可以生成删除内容的日志并在删除后通过电子邮件将其发送出去,那就是一个额外的好处。

# set folder path
$dump_path = "c:\temp"

# set minimum age of files and folders
$max_days = "-7"

# get the current date
$curr_date = Get-Date

# determine how far back we go based on current date
$del_date = $curr_date.AddDays($max_days)

# delete the files and folders
Get-ChildItem $dump_path   | Where-Object { $_.CreationTime -lt $del_date }  | Remove-Item -Recurse
Run Code Online (Sandbox Code Playgroud)

scripting powershell

3
推荐指数
1
解决办法
1万
查看次数

如何在远程 Powershell 会话中使用共享函数?

我有一些用于设置 IIS Web 应用程序、消息队列等的 Powershell 脚本。

他们使用我们创建的一组共享函数库 - 所以每个脚本都以行开头

. .\common.ps1

引用共享库。共享库包含一组函数,例如Create-IisApplicationPool,Create-MessageQueue等等,然后从实际脚本中调用这些函数。这些脚本的问题在于您需要通过远程桌面登录并在本地运行它们,因此我正在编写一些新脚本来将代码部署到 Amazon EC2 实例,并使用 Powershell 远程处理在本地调用它们。

我无法解决的是如何使这个共享库在远程 Powershell 会话中可用。

这是一个简单的例子:

函数.ps1

function Add-Title([string] $name) {
    "Mr. $name"
}

function Say-HelloWorld([string] $name = "World") {
    $computerName = $env:COMPUTERNAME
    $greeting = Add-Title($name)
    Write-Host "Hello, $greeting ($computerName)"
}
Run Code Online (Sandbox Code Playgroud)

例子.ps1

. ./functions.ps1


$remoteUsername = "username"
$remotePassword = "password"
$remoteHostname = "172.16.0.100"

$securePassword = ConvertTo-SecureString -AsPlainText -Force $remotePassword
$cred = New-Object System.Management.Automation.PSCredential $remoteUsername, $securePassword


Say-HelloWorld("Spolsky")
Run Code Online (Sandbox Code Playgroud)

在本地运行,这很好用 - 并按预期说“你好,斯波尔斯基先生(DYLAN_PC)”。

现在,如果我Say-HelloWorld …

remote-access powershell remoting

3
推荐指数
1
解决办法
7017
查看次数

如何自动删除共享驱动器上的 /tmp 文件夹?

我们有一个 /tmp 文件夹,人们使用它来存放临时文件。它可以是任何东西和任何文件。

我们想让它自动删除(或最好移动到同一共享驱动器上的另一个文件夹)过去两周内未访问的所有文件。这应该按照我不必手动执行的时间表每周发生一次。

有没有软件可以做到这一点?谁能有剧本?

服务器2008R2

scripting powershell windows-server-2008-r2

3
推荐指数
1
解决办法
1722
查看次数