标签: powershell

从 .bak 中查找完整或差异备份(使用 powershell 或通过任何其他方式)

我正在尝试确定 MS SQL 备份文件 (.bak) 是完整的还是差异的。

是否有捷径可寻?在powershell中这样做的一种方法?

backup powershell sql sql-server

2
推荐指数
1
解决办法
1251
查看次数

powershell 管道对象来运行

这是我正在尝试做的存根:

function Set-test {
[CmdletBinding()]
    param(
        [Parameter(Mandatory=$True,
               ValueFromPipeline=$True)]
        [object[]]$inputObject
    )
    Write-Verbose "Set-test: input obj= $inputObject" 

    PROCESS {
        foreach ($obj in $inputobject) {
            Write-Output $obj
        }
    }   
}

function Get-test {
    $obj = New-Object PSObject
    $obj | Add-Member -MemberType NoteProperty -Name "swName" -Value "banana"
    $obj | Add-Member -MemberType NoteProperty -Name "Version" -Value "3.2.2"
    Write-Output "obj = $obj"
    $obj | Set-test -verbose    
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

PS > Get-test
obj = @{swName=banana; Version=3.2.2}
VERBOSE: Set-test: input obj= 
Get-Process : Cannot evaluate parameter 'Name' because …
Run Code Online (Sandbox Code Playgroud)

powershell

2
推荐指数
1
解决办法
2266
查看次数

具有多个过滤器的复制项目

如何将副本与多个过滤器值一起使用?

例如,如果我只指定 1 个值来过滤 (*.jpg)

Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg -Destination D:\Users\MS5253\Desktop\Lots
Run Code Online (Sandbox Code Playgroud)

这为我创建了一个仅包含 jpg 文件的文件夹 (D:\Users\MS5253\Desktop\Lots\TEST)

但我也想过滤 xml 文件,我试过这个:

Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg,*.xml -Destination D:\Users\MS5253\Desktop\Lots
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误。

和这个 : Copy-Item -Path Y:\TEST -Recurse -include "*.jpg","*.xml" -Destination D:\Users\MS5253\Desktop\Lots

它不起作用...

感谢您的帮助,我正在使用带有 Powershell v4 的 Windows 7。

scripting windows powershell

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

如何在 powershell 中为每个 Active Directory OU 用户更正我的 foreach 循环?

目标:创建一个 for 或 foreach 循环来为 OU 中的每个用户执行一些代码(在本例中,只需打印 x)。我使用带有 ActiveDirectory 模块的 powershell 2.0。

到目前为止:这就是我所拥有的(见下文)。它只是为每个用户打印出 X。但它并没有像我想要的那样工作,相反,我认为它可能对每一行都这样做。所以我得到了 6 个 X,分别代表 'name'、'----'、'test1'、'test2'、SPACE、SPACE。

$pool = Get-ADUser -Filter * -SearchScope Subtree -SearchBase "OU=Test,OU=Users,OU=jack,DC=Corp,DC=jill,DC=com" -Properties name | FT name
foreach ($user in $pool )
{ write-host "x"}
$pool
Run Code Online (Sandbox Code Playgroud)

结果,SPACE 将用句点 (.) 表示:

x
x
x
x
x
x


name                        
----                      
test1                  
test2
.
.
Run Code Online (Sandbox Code Playgroud)

我不确定它为什么这样做。如果您有更好的方法或方法来处理这个问题,我会很高兴听到的。

windows powershell active-directory organizational-unit

2
推荐指数
1
解决办法
995
查看次数

通过将用户添加到 WinRMRemoteWMIUsers 来解决 Powershell Remoting 安全隐患

在我们当前的工作流程中,我们必须将 RDP 连接到多个服务器才能知道服务是否正在运行。我们没有这些服务器的管理员权限,但可以查看、启动和停止服务。

我们想改用 Powershell Remoting。就像是

 (1..8)|%{gsv -c "server$($_" -n "*ourservice*"}
Run Code Online (Sandbox Code Playgroud)

会更容易和更快地做到。

通过将我们的用户添加到WinRMRemoteWMIUsers组中,我是否正确

  • 我们可以执行命令(我们的关注)
  • 我们无法通过 RDP 对系统做任何我们现在无法做的事情(安全管理的关注)

编辑

以下摘自 Secrects of Powershell Remoting 似乎解决了安全问题

powershellorg · PowerShell 远程处理的秘密

PowerShell 和 Remoting 都不是恶意软件的“后门”

这是一个重大的误解。请记住,默认情况下,PowerShell 不执行脚本。当它这样做时,它只能执行正在执行的用户有权运行的命令 - 它不会在超级特权帐户下执行任何操作,并且既不绕过现有权限也不绕过安全性。

底线:由于其工作方式,PowerShell Remoting 不允许任何用户(无论是否获得授权)执行他们通过其他十几种方式无法执行的任何操作

security powershell

2
推荐指数
1
解决办法
1375
查看次数

如何从 Windows 命令提示符访问 unix 机器

我在 Hyper-V 服务器上创建了 Vyatta 虚拟机,但我没有在该虚拟机上启用 ssh。我想在不启用 ssh 的情况下连接到该机器并使用 power shell 执行一些 shell 命令。有可能吗?除了 Hyper-V 控制台之外,还有什么方法可以访问该机器?

linux powershell hyper-v vyatta

2
推荐指数
1
解决办法
2376
查看次数

使用 Windows PowerShell 查找和删除特定所有者的文件

由于勒索软件攻击(没什么大不了的,都是从备份中恢复的)我想清理网络共享上的目录和子目录,攻击发生在那里创建了大量乱码文件。它们都归在受感染 PC 上工作的用户所有。

到目前为止,我最好的尝试是这样的:

Get-ChildItem Z:\ -Recurse | get-acl | where {($_.Owner -eq "DOMAIN\username")} | foreach { $_.Delete()}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为get-acl不支持$_.Delete()


$或者$_是不是我的问题,我认为。我确实有一些其他可能的命令。它们运行。

就像这里的这个:

Get-ChildItem -filter "~*.*" -path Z:\ -recurse | where {($_.LastWriteTime -lt (get-date).AddDays(-7))} | foreach { $_.Delete()}
Run Code Online (Sandbox Code Playgroud)

几天以来,我一直使用它来删除通过从备份中恢复文件而创建的文件,而这些文件是由未受恶意软件影响的备份文件创建的。我只是恢复了整个共享

但我会试一试。

关于您的其他提示,我必须解释一下,运行勒索软件的用户帐户在该网络驱动器上没有自行创建的文件。该用户的读取权限就足够了。

不幸的是,此共享对每个人都有更改访问权限。那是在早期,我们都与勒索软件没有太多关系。当然,等主要工作完成后,我会更改这些访问权限。

所以请我需要建议以删除此特殊帐户拥有的文件。

powershell filter deleting owner

2
推荐指数
1
解决办法
1210
查看次数

Active Directory 中的 instanceType 属性

我需要更改服务帐户的 instanceType 属性。如果我尝试从 Active Directory 用户和计算机控制台更改它,它会变灰,如果我尝试使用 Set-Aduser 通过 powershell 更改它,我会收到“无法修改该属性,因为它归系统所有”。

任何人都对如何将 instanceType 属性从 4 更改为 0 有任何想法?

powershell active-directory user-management attributes

2
推荐指数
1
解决办法
1881
查看次数

为什么我的登录脚本没有映射任何驱动器?

我在 PowerShell 中编写了一个登录脚本。该脚本嵌入在 GPO 中,并在用户登录域时运行。

我的问题是,我在脚本中部署的驱动器没有被部署。我确信登录脚本会运行,因为在脚本结束时我会向自己发送一封电子邮件,但我总是会收到它。所以运行脚本应该不是问题。$Error每次脚本运行时,我都会记录整个变量,但没有说明为什么会发生此错误。

我几乎可以肯定错误不在脚本本身中 - 我认为它必须是权限错误。

我认为当我-NoProfile在运行脚本时指定参数时可以解决这个问题,但我不知道将它放在 GPO 的哪个位置。由于美观原因,我不希望批处理文件调用脚本:-)。

编辑:指定-noprofile没有解决问题

编辑:由于有评论说没有足够的关于驱动器如何映射的信息,我将整个映射部分粘贴在下面:

# UserOU as a parameter, value set in GPO
Param([string]$UserOU)

# preparing some stuff...
Import-Module .\SecureStringFunctions.psm1
[Byte[]]$key = (1..16)
$pw = Get-Content .\LocalAdminCred.txt | ConvertTo-SecureString -key $key

# Tried this to elevate the Script IF it's needed. Didn't solve my problem. works only on PS 4.0 but didn't solve the issue on my 5.0 machine
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) 
{ Start-Process …
Run Code Online (Sandbox Code Playgroud)

windows powershell logon-scripts group-policy

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

计划任务以退出代码 0 运行,但并不总是执行 powershell 脚本

情况

在我们的组织中,我制作了一个 GPO 来创建计划任务。此任务在两个用户帐户登录时触发。

它执行一个 powershell 脚本来更改网络连接的 DNS 服务器。(为了阻止这些用户的一些网站,使用 dnsmasq。我知道这不是一个防弹解决方案,但它已经足够了。)

计划任务的操作是以下命令:

C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe

这些是参数:

-ExecutionPolicy Bypass –NoProfile –Command "& {C:\ProgramData\ORGNAME\scripts\SetDNS.ps1}" > C:\ProgramData\ORGNAME\scripts\SetDNS.log

如您所见,输出被发送到日志文件。

这是脚本的内容:

$wmi = get-wmiobject Win32_NetworkAdapterConfiguration -filter "ipenabled = 'true'"
foreach($adapter in $wmi)
{
    if($adapter.description -NotLike "*VMware*")
    {
        $adapter.SetDNSServerSearchOrder("XXX.XXX.XXX.XXX")
    }
}

invoke-expression -command "c:\windows\system32\ipconfig /flushdns"
Run Code Online (Sandbox Code Playgroud)

问题

问题是这很好用,大约 10 次中有 9 次。当它不起作用时,任务调度程序仍然报告退出代码 0,但似乎脚本甚至没有开始执行,因为没有任何反应并且没有创建日志文件。

一些额外的信息

  • 该任务在 SYSTEM 帐户下运行
  • 它以最高的特权运行
  • 当任务按需运行时,它工作正常
  • 所有计算机都运行 Windows 7 Enterprise (x64)

我尝试过的一些事情

  • 我想也许是任务调度程序触发脚本太快了,有些事情可能还没有初始化,所以我尝试设置 30 秒的延迟。

  • 每 5 分钟重新运行一次任务,持续 15 分钟。

  • 任务失败时重新启动任务,这显然不起作用,因为 powershell.exe 似乎返回错误代码 0。

powershell scheduled-task

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