我们有一个内部 Excel 插件,定期在多个 UNC 目录中部署。每个副本都设置为只读,以便用户无法意外更改。“部署”过程涉及进入每个目录,然后通过单击并拖动将文件复制到该位置。由于该文件是只读的,因此没有冲突,用户关闭 Excel 窗口并重新启动,他们就有了更新。
我已经着手用一个批处理文件来替换它,随着目录数量的不断增长,该批处理文件会自动执行此操作,并且偶尔会出现错误,例如忘记将文件设置为只读。
我像这样使用 xcopy:
xcopy "%workingdir%%filename%" "%uncpath%%targetdirectory%" /y /k
Run Code Online (Sandbox Code Playgroud)
我在写入文件时被拒绝访问。有没有一种方法可以实现我们通过使用批处理单击和拖动获得的功能?我确信一定有办法做到这一点,但到目前为止我们看到的所有解决方案都涉及暂时删除“只读”然后复制文件的代码。我不认为这是一个可行的解决方案,因为如果有人在那一刻加载文件,它可能会锁定对文件的访问。
编辑:发布此后不久发现它是 xcopy 标志 /r 不知道我是如何错过它的,我想只是那些日子之一。谢谢。
有没有一种优雅的方法可以从文件夹路径获取(曾祖父母文件夹)三层?
我只想C:\folderA\folderB
从完整路径中获得,但这两种解决方案对我来说都显得丑陋。
$path = "C:\folderA\folderB\folderC\FolderD\folderE"
# option 1
(Get-Item $path).parent.parent.parent.FullName
# option 2
$path | Split-Path -Parent | Split-Path -Parent | Split-Path -Parent
Run Code Online (Sandbox Code Playgroud) 我试图使用输出变量Write-Output
,但它在PowerShell类方法中不起作用.Write-Host
工作中.请参阅下面的示例代码.
class sample {
[string] sampleMethod() {
$output = "Output message"
try {
Write-Output $output
throw "error"
}
catch {
Write-Output $output
$_
}
return "err"
}
}
$obj = [sample]::new()
$obj.sampleMethod()
Run Code Online (Sandbox Code Playgroud)
是否有任何特定原因导致Write-Output
在类方法中不起作用?
我需要将HashSet转换为ArrayList?
$hashset = New-Object System.Collections.Generic.HashSet[int]
$hashset.Add(1)
$hashset.Add(2)
$hashset.Add(3)
$arraylist = New-Object System.Collections.ArrayList
# Now what?
Run Code Online (Sandbox Code Playgroud) 我正在尝试添加一个新的服务器变量
Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="HTTP_COOKIE"}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
Add-WebConfigurationProperty : Filename:
Error: Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'Test'
At line:1 char:1
+ Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filt ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Add-WebConfigurationProperty], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.AddConfigurationPropertyCommand
Run Code Online (Sandbox Code Playgroud)
我可以使用 try catch 块进行抑制,但想检查变量是否已经存在,如果它已经存在则跳过添加。
谁能告诉我如何进行这项检查?
我尝试PSCredential
使用包含德语变音符号的密码创建一个对象,并将其传递给New-WebServiceProxy
cmdlet。只要密码不包含以下示例中的任何变音符号,代码就会按预期工作:
$secp = ConvertTo-SecureString 'abÜ312!' -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential('\user@db', $secp)
$proxy = New-WebServiceProxy -Uri "https://example.com/webservice/myWs?wsdl" -Credential $mycreds
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误消息:
New-WebServiceProxy :请求失败,HTTP 状态为 401:未经授权。
当我使用例如 Fiddler 捕获流量时,我看到New-WebServiceProxy
cmdlet 将凭据添加为具有base64编码的基本授权:
GET https://example.com/webservice/myWs?wsdl HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.42000)
Authorization: Basic dXNlckBkYjphYtwzMTIh
Host: example.com
Run Code Online (Sandbox Code Playgroud)
这是解码后的 Base64 字符串在 Utf8 中的样子:
所以看起来 PowerShell 正在将元音符号编码为ANSI字符串。当我手动对凭据(dXNlckBkYjphYsOcMzEyIQ==
而不是dXNlckBkYjphYtwzMTIh
)进行 base64 编码并回复提琴手请求时,我得到了所需的响应。
不幸的是,我无法使用此解决方法,因为New-WebServiceProxy
它不允许我自己添加 Authorization 标头。 …
我有一个WordPress博客在反向代理(Apache)后面运行.
httpd.vhosts.conf:
<VirtualHost *:80>
ServerName blog.domain.com:80
ServerAlias www.blog.domain.com
ProxyPass / http://192.168.101.11/blog/
ProxyPassReverse / http://192.168.101.11/blog/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
该博客工作正常,我可以登录作为管理员,但是当试图保存设置或删除插件(和wp_redirect发生),我重定向到登录页面,因为WordPress的显然没有找到/接受会话cookie,以及该行动未完成.
因此,我添加了这一行:
ProxyPassReverseCookiePath / http://192.168.101.11/blog/
Run Code Online (Sandbox Code Playgroud)
(请参阅Apache代理cookie仅适用于第一个应用程序)
这似乎解决了这个问题.但是,我现在注意到,使用此设置,登录根本不起作用,但仅限于Safari和IE(在Opera,Firefox,Chrome中工作得很好).我只是再次被重定向到登录页面.
一些其他信息:
wordpress_test_cookie
管理部分根本不是在Safari中创建的,只是类似的"__uc*"
等等(对于博客本身).如果没有ProxyPassReverseCookiePath
-entry,他们正在创建的.WP-config.php文件
define('COOKIE_DOMAIN', '.blog.domain.com');
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');
define('ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用 powershell。我有两个列表,每个列表有 132 条记录和 134 条记录。它们有 85 条共同记录,我想获取单独列表中的 list1 中但不在 list2 中的值(例如 list_out1),以及另一个列表中的 list2 但不在 list1 中的值(例如 list_out2)。我终于想打印list_out1和list_out2。我尝试按照此答案中给出的方式执行操作,但在尝试打印 list_out1 时它为我提供了 list1 中的所有值。另外,我尝试使用 foreach 循环和 if 条件如下,它还为我提供了 list1 中的所有值来打印 list_out1。
foreach ($i in $list1)
{
if($list2 -notcontains $i) {
$i
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道我哪里做错了。这个逻辑对我来说似乎没问题。如果我错了请纠正我。
我有一个 PS 脚本,用于检查 Active Directory 中某些自定义用户的属性。属性之一是“经理”。
$data = Get-ADUser $user -Properties * | Select-Object DisplayName, LockedOut, Enabled, LastLogonDate, PasswordExpired, EmailAddress, Company, Title, Manager, Office
Write-Host "9." $user "manager is" $data.manager -ForegroundColor Green
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时,我得到:
$data = Get-ADUser $user -Properties * | Select-Object DisplayName, LockedOut, Enabled, LastLogonDate, PasswordExpired, EmailAddress, Company, Title, Manager, Office
Write-Host "9." $user "manager is" $data.manager -ForegroundColor Green
Run Code Online (Sandbox Code Playgroud)
问题是文本"OU=SO,OU=PL,OU=RET,OU=HBG,DC=domain,DC=com"
对于某些用户来说会有所不同
如何修改输出并删除除 之外的所有内容"cool.boss"
?先感谢您
我在 powershell 中有点新(预期消息开始:))。我无法在这里或其他地方找到我的问题的答案,所以有人可以帮助我吗?
例如,我们想使用一些在 .NET 库中声明的枚举。我们如何在 .NET 中使用它?就像:
using System.Data.SqlClient;
public class Test {
var x = SortOrder.Ascending;
}
Run Code Online (Sandbox Code Playgroud)
如果我需要在 powershell 中使用它,据我所知,我需要编写如下内容:
$x = [System.Data.SqlClient.SortOrder]::Ascending
Run Code Online (Sandbox Code Playgroud)
所以,问题是,是否有可能在 powershell 中使用类似 C# 中的“使用”来将语法缩短为类似:$sortOrder.Ascending
或[SortOrder]::Ascending
?