我们目前正在将所有SQL Server 2012服务器升级到SQL Server 2016.此过程涉及建立新的服务器名称并重新定位别名。
现在,我的工作是更新所有autosys作业和bat文件,以确保所有应用程序仍然有效。这是我第一次这样做。到目前为止,以前的开发人员只是将服务器名称硬编码到bat文件中。其中许多应用程序也会触发Cognos报告。由于我们需要一个bat文件来处理所有环境,因此我们可以使用代码部署,以前的开发人员使用了以下内容:
REM ************************************************************
REM Gateway URLs
REM ************************************************************
Set GatewayURL_DEV=Cognos Dev Server
Set GatewayURL_QA=Cognos QA Server
Set GatewayURL_PROD=Cognos_Prod_Server
if '%computername%' == 'VHDDEV' goto Dev
if '%computername%' == 'VHQDPPT' goto QA
if '%computername%' == 'VHPPROD' goto Prod
:Dev
set GateWayURL=%GateWayURL_DEV%
GOTO ExeTrigger
:QA
set GateWayURL=%GateWayURL_QA%
GOTO ExeTrigger
:Prod
set GateWayURL=%GateWayURL_PROD%
GOTO ExeTrigger
:ExeTrigger
E:
cd %TriggerPath%
CALL CognosTrg.bat %GatewayURL%
exit/B 0
现在我不想在下次升级时再次更改这些内容,因此我决定使用WMIC来获取域名。所以我想出了以下内容:
REM ************************************************************
REM Finding the server name
REM ************************************************************
REM
for /f "tokens=2 delims==" %%A in ('wmic computersystem get domain /value') do set "Env=%%A"
REM ************************************************************
REM Branching
REM ************************************************************
if %Env%==dev.company.net (GOTO DEV)
if %Env%==qa.company.net (GOTO QA)
if %Env%==prod.company.net (GOTO PROD)
:DEV
set GateWayURL=%GateWayURL_DEV%
GOTO ExeTrigger
:QA
set GateWayURL=%GateWayURL_QA%
GOTO ExeTrigger
:PROD
set GateWayURL=%GateWayURL_PROD%
GOTO ExeTrigger
:ExeTrigger
echo Host Server Name: %computername%
echo Cognos Environment: %Env%
echo Cognos Gateway: %GateWayURL%
这非常有效,并为我提供了所有服务器环境的正确值。当我更改ExeTrigger部分以调用Cognos Report时会出现问题。
:ExeTrigger
echo Host Server Name: %computername%
echo Cognos Environment: %Env%
echo Cognos Gateway: %GateWayURL%
E:
cd %TriggerPath%
CALL CognosTrg.bat %GatewayURL%
exit/B 0
此操作失败,autosys日志显示分配似乎没有完成。
C:\Users\Act>if ==DEV (GOTO DEV)
显示autosys错误日志:
(GOTO was unexpected at this time.
如果我注释掉CALL CognosTrg.bat%GatewayURL%这一行,它会在autosys日志中显示:
C:\Users\Act>if dev.company.net == dev.company.net (GOTO DEV )
C:\Users\Act>set GateWayURL=Cognos Dev Server
C:\Users\Act>GOTO ExeTrigger
C:\Users\Act>echo Host Server Name: VHDDEV
Host Server Name: VHDDEV
C:\Users\Act>echo Cognos Environment: dev.company.net
Cognos Environment: dev.company.net
C:\Users\Act>echo Cognos Gateway: Cognos Dev Server
Cognos Gateway: http://"Cognos Dev Server"
C:\Users\Act>E:
E:\>cd "E:\mpapp\Act\Trigger\lib\"
E:\MPAPP\Act\Trigger\lib>CALL CognosTrg http://"Cognos Dev Server" fired successfully
所以我无法解决这个问题。触发器在旧服务器上运行,如果我只执行CognosTrg bat文件手册,则会正确执行。我还决定回去硬编码值,这也很有用。
由于子bat文件调用,WMIC执行失败了吗?我真的想避免硬编码服务器名称并回到"如果'%computername%'"实践。
答案 0 :(得分:0)
我觉得这可能只是var chartData1 = [];
var chartData2 = [];
var chartData3 = [];
generateChartData();
function generateChartData() {
var firstDate = new Date();
firstDate.setDate(firstDate.getDate() - 500);
firstDate.setHours(0, 0, 0, 0);
for (var i = 0; i < 500; i++) {
var newDate = new Date(firstDate);
newDate.setDate(newDate.getDate() + i);
var a1 = Math.round(Math.random() * (40 + i)) + 100 + i;
var a2 = -1 * Math.round(Math.random() * (100 + i)) + 200 + i;
var a3 = -1 * Math.round(Math.random() * (1000 + i)) + 2000 + i;
chartData1.push({
date: newDate,
value: a1
});
chartData2.push({
date: newDate,
value: a2
});
chartData3.push({
date: newDate,
value: a3
});
}
}
AmCharts.makeChart("chartdiv", {
type: "stock",
dataSets: [{
title: "first data set",
fieldMappings: [{
fromField: "value",
toField: "value"
}],
dataProvider: chartData1,
categoryField: "date"
},
{
title: "second data set",
fieldMappings: [{
fromField: "value",
toField: "value2"
}],
dataProvider: chartData2,
categoryField: "date"
},
{
title: "third data set",
fieldMappings: [{
fromField: "value",
toField: "value3"
}],
dataProvider: chartData3,
categoryField: "date",
compared: true
}
],
panels: [{
showCategoryAxis: false,
title: "Data set #1",
recalculateToPercents: "never",
stockGraphs: [{
id: "g1",
valueField: "value",
comparable: true,
bullet: "round"
}],
stockLegend: {
}
},{
showCategoryAxis: false,
title: "Data set #2",
recalculateToPercents: "never",
stockGraphs: [{
id: "g2",
valueField: "value2",
comparable: true,
bullet: "round"
}],
stockLegend: {
}
}, {
showCategoryAxis: true,
title: "Data set #3",
recalculateToPercents: "never",
stockGraphs: [{
id: "g3",
valueField: "value3",
compareField: "value3",
comparable: true,
bullet: "round",
visibleInLegend: false
}],
stockLegend: {
}
}
],
chartScrollbarSettings: {
graph: "g1"
},
chartCursorSettings: {
valueBalloonsEnabled: true,
fullWidth:true,
cursorAlpha:0.1
},
periodSelector: {
periods: [{
period: "MM",
selected: true,
count: 1,
label: "1 month"
}, {
period: "YYYY",
count: 1,
label: "1 year"
}, {
period: "YTD",
label: "YTD"
}, {
period: "MAX",
label: "MAX"
}]
}
});
奇怪的unicode行结束序列的问题。如果我是正确的,你应该能够通过将你的for循环更改为:
WMIC
您可以另外首先取消定义变量,然后检查它们是否在循环后定义:(如果未定义值,退出脚本)
For /F "Skip=1" %%A In ('WMIC ComputerSystem Get Domain') Do For %%B In ("%%A"
) Do Set "Env=%%~B"
以上答案假设您的域名不包含空格或有问题的字符。