Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
It's currently in the collection as get-tfsstatus.ps1 which has caused confusion since it doesn't act like "tf status", but it's intended to run on your app tier and gather some config settings - I use it to confirm the right things have changed when using "tfsadminutil activateat" or "tfsreg" or whatever.
Note that it needs to run on the app tier, as it uses a local registry path to figure out where the TFS bits are installed and then uses a local filesystem path to read the web.config files.
It'll change over time, since right now I haven't done the WMI calls to get the IIS settings (web sites, app pools, etc), although they'll be easy to add, I just need to get around to it :) It's also ripe for a good bit of refactoring, but it's in the "works for me" category right now :)
Example output (from one of our lab machines):
AppTierInstallLocation : D:\Program Files\Microsoft Visual Studio 9.0 Team Foundation Server\ AppTierMainWebConfigPath : D:\Program Files\Microsoft Visual Studio 9.0 Team Foundation Server\W eb Services\web.config AppTierServicesWebConfigPath : D:\Program Files\Microsoft Visual Studio 9.0 Team Foundation Server\W eb Services\Services\web.config AppTierMainWebConfigTfsNameUrl : https://VSTSNC-020:8080 AppTierMainWebConfigAllSettings : {sqlTimeout, commandLogging, TFSNameUrl, traceWriter...} AppTierServicesWebConfigConnectionString : Application Name=TeamFoundation;Persist Security Info=False;Initial C atalog=TfsIntegration;Data Source=VSTSNC-008;Integrated Security=SSPI AppTierServicesWebConfigAllSettings : {ConnectionString, eventingEnabled, DetailedExceptions, emailNotifica tionFromAddress...} DataTierDatabaseConnections : {BIS DB, BISDW DB, TeamBuild DB, WIT DB...} DataTierServiceInterfaces : {BuildStoreService, BuildControllerService, IBISEnablement, LinkingPr oviderService...} DataTierAppTierStamp : VSTSNC-020 DataTierAppTierStampPingCheck : Successful ServicesReportsServer : https://VSTSNC-020/Reports ServicesReportsServerCheck : Successful ServicesReportsWebService : https://VSTSNC-020/ReportServer/ReportService.asmx ServicesReportsWebServiceCheck : Successful ServicesReportsWebServiceListSecureMethods : https://VSTSNC-020/ReportServer/ReportService.asmx/ListSecureMethods ServicesReportsWebServiceListSecureMethodsCheck : Successful ServicesSharepoint : https://VSTSNC-020:80 ServicesSharepointCheck : Successful ServicesSharepointSitesAsmx : https://VSTSNC-020:80/_vti_bin/sites.asmx ServicesSharepointSitesAsmxCheck : Successful ServicesSharepointAdmin : https://VSTSNC-020:17012/_vti_adm/admin.asmx ServicesSharepointAdminCheck : Successful
The script:
function runQuery([system.data.sqlclient.SqlConnection] $sqlConn, [string] $query) {
$sqlCommand = new-object 'system.data.sqlclient.SqlCommand' $query, $sqlConn
$rdr = $sqlCommand.ExecuteReader()
while($rdr.Read())
{
if ($rdr.FieldCount -eq 1)
{
# single value, just return it
$rdr.GetValue(0)
}
else
{
# multiple columns, create a custom result object
$row = new-object psobject
$row.psobject.typenames[0] = "SqlResultObject"
for($c = 0; $c -lt $rdr.FieldCount; $c++)
{
$row | add-member noteproperty $rdr.GetName($c) $rdr.GetValue($c)
}
$row
}
}
$rdr.close();
}
function print-header([string] $header)
{
write-host ''
write-host $header
write-host ('=' * $header.length)
}
$regPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Visual Studio * Team Foundation Server (services) - ENU'
$tfsStatus = new-object psobject
$tfsStatus.psobject.typenames[0] = "TfsServerConfigurationObject"
### App Tier
$installLocation = $(get-itemproperty $regPath).InstallLocation
$tfsStatus | add-member noteproperty AppTierInstallLocation $installLocation
$topWebConfigPath = join-path $installLocation 'Web Services\web.config'
$tfsStatus | add-member noteproperty AppTierMainWebConfigPath $topWebConfigPath
$servicesWebConfigPath = join-path $installLocation 'Web Services\Services\web.config'
$tfsStatus | add-member noteproperty AppTierServicesWebConfigPath $servicesWebConfigPath
$topWebConfig = [xml](get-content $topWebConfigPath)
$appSettings = $topWebConfig.configuration.appSettings
$tfsNameUrl = $appSettings.SelectSingleNode('add[@key="TFSNameUrl"]').value
$tfsStatus | add-member noteproperty AppTierMainWebConfigTfsNameUrl $tfsNameUrl
$tfsStatus | add-member noteproperty AppTierMainWebConfigAllSettings $appSettings.add
$servicesWebConfig = [xml](get-content $servicesWebConfigPath)
$appSettings = $servicesWebConfig.configuration.appSettings
$connectionString = $appSettings.SelectSingleNode('add[@key="ConnectionString"]').value
$tfsStatus | add-member noteproperty AppTierServicesWebConfigConnectionString $connectionString
$tfsStatus | add-member noteproperty AppTierServicesWebConfigAllSettings $appSettings.add
### Data Tier
$sqlConn = new-object 'system.data.sqlclient.SqlConnection' $connectionString
$sqlConn.Open()
$dbConnections = runQuery $sqlConn 'select name,dbname,servername,connection from tbl_database'
$tfsStatus | add-member noteproperty DataTierDatabaseConnections $dbConnections
$serviceInterfaces = runQuery $sqlConn 'select name,url from tbl_service_interface'
$tfsStatus | add-member noteproperty DataTierServiceInterfaces $serviceInterfaces
# AT Stamp
$atStamp = runQuery $sqlConn "select value from tbl_registration_extended_attributes where name='ATMachineName'"
$tfsStatus | add-member noteproperty DataTierAppTierStamp $atStamp
$tfsStatus | add-member noteproperty DataTierAppTierStampPingCheck (ping-hostname $atstamp)
$reportsUrl = runQuery $sqlConn "select url from tbl_service_interface where name='BaseReportsUrl'"
$tfsStatus | add-member noteproperty ServicesReportsServer $reportsUrl
$tfsStatus | add-member noteproperty ServicesReportsServerCheck (ping-url $reportsUrl)
# Reports
$reportsService = runQuery $sqlConn "select url from tbl_service_interface where name='ReportsService'"
$tfsStatus | add-member noteproperty ServicesReportsWebService $reportsService
$tfsStatus | add-member noteproperty ServicesReportsWebServiceCheck (ping-url $reportsService)
$reportsListMethods = $reportsService + '/ListSecureMethods'
$tfsStatus | add-member noteproperty ServicesReportsWebServiceListSecureMethods $reportsListMethods
$tfsStatus | add-member noteproperty ServicesReportsWebServiceListSecureMethodsCheck (ping-url $reportsListMethods)
# Sharepoint
$sharepointUrl = runQuery $sqlConn "select url from tbl_service_interface where name='BaseServerUrl'"
$tfsStatus | add-member noteproperty ServicesSharepoint $sharepointUrl
$tfsStatus | add-member noteproperty ServicesSharepointCheck (ping-url $sharepointUrl)
$sharepointSitesAsmx = $sharepointUrl + '/_vti_bin/sites.asmx'
$tfsStatus | add-member noteproperty ServicesSharepointSitesAsmx $sharepointSitesAsmx
$tfsStatus | add-member noteproperty ServicesSharepointSitesAsmxCheck (ping-url $sharepointSitesAsmx)
$sharepointAdmin = runQuery $sqlConn "select url from tbl_service_interface where name='WssAdminService'"
$tfsStatus | add-member noteproperty ServicesSharepointAdmin $sharepointAdmin
$tfsStatus | add-member noteproperty ServicesSharepointAdminCheck (ping-url $sharepointAdmin)
$sqlConn.Close()
$tfsStatus
Comments
- Anonymous
March 13, 2007
Howard van Rooijen on Scrum for Team System 1.2 released. James Manning on get-tfsserverstatus.ps1...