我有一个 IIS 8 网站设置,其中有一个应用程序。
使用 Powershell 如何获取主站点和应用程序的“物理路径凭据登录类型”设置(默认为 ClearText)?
我尝试过的
为每个应用程序设置特定的用户和非默认的“登录类型”。
(get-item IIS:\Sites\MYSITE).physicalPath
(get-item IIS:\Sites\MYSITE).username
(get-item IIS:\Sites\MYSITE).password
获取我期望的准确值,但没有可用的“登录类型”属性。
(get-item IIS:\Sites\MYSITE).virtualDirectoryDefaults
显示路径、物理路径、用户名和密码全部为空白,并将“logonMethod”设置为默认的“ClearText”。
(get-item IIS:\Sites\MYSITE).Collection[0].virtualDirectoryDefaults
和
(get-item IIS:\Sites\MYSITE).Collection[1].virtualDirectoryDefaults
两者显示相同,路径、物理路径、用户名和密码全部为空白,并且“logonMethod”设置为默认的“ClearText”。
我想要这样做的原因是为了在脚本中添加一项检查,以确保站点符合“设置检查清单”,在那里我能够从 powershell 映射所有其他设置。
答案1
解决办法是远离网络管理模块并进入Microsoft.Web.管理.服务器管理器
Add-Type -AssemblyName "Microsoft.Web.Administration, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
$iis = new-object Microsoft.Web.Administration.ServerManager
($iis.Sites | where { $_.name -eq "MYSITE" }).applications[1] | select -ExpandProperty VirtualDirectories | select LogonMethod
返回
ClearText
applications[1]表示第二个应用程序,applications[0]是根应用程序。
这添加类型版本很重要,以避免加载 IIS-Express 服务器实例。
仅供参考,因为您必须创建服务器实例,所以在重新创建该对象之前,IIS 管理器中的任何更改都不可用。
答案2
我想你已经偶然发现了答案。似乎没有明确的属性,因为给定的凭据只是用来覆盖普通线程凭据。
但是,您可以检查用户名或密码是否已设置,并创建如下函数
function Get-PhysicalLogonType ($site) {
if($site.username -eq '' -and $site.password -eq '') {
return 'PassThrough'
}
return 'SpecificUser'
}
# ... use it somewhere in your script
$site = (get-item IIS:\site\mysite)
Get-PhysicalLogonType $site
答案3
下面返回 VirtualDirectory 和 logonMethod 的 physicalPath,我相信它可以以这样的方式完成,即您可以定位特定的“应用程序目录”。
Get-Item IIS:\Sites\* | Select-Object -ExpandProperty Collection | Select-Object -ExpandProperty Collection | Select-Object -Property physicalPath,logonMethod