[SDP OP]使用 java script在浏览器的console页签批量协调资产

[SDP OP]使用 java script在浏览器的console页签批量协调资产

Idea
有些用户的域迁移了(域名修改了)导致新域里资产扫描后由于某些型号的设备的服务标签获取不到,而域名又不一致,因此产生了大量重复的资产,想要批量合并这些资产,可以使用浏览器使用java script进行合并
前提条件:MSP需要在14950以上版本,SDP需要在15250以上版本可执行
步骤:
1. 用查询语句查询系统中又多少这样的重复资产,输出为csv文件

SELECT 
    base_name AS "Asset Name",

    /* Resource IDs */
    CONCAT(
        STRING_AGG(CASE WHEN r.resourcename LIKE '%.s' THEN r.resourceid::text END, ','),
        CASE 
            WHEN COUNT(CASE WHEN r.resourcename LIKE '%.s' THEN 1 END) > 0 
             AND COUNT(CASE WHEN r.resourcename LIKE '%.t' THEN 1 END) > 0
            THEN ','
            ELSE ''
        END,
        STRING_AGG(CASE WHEN r.resourcename LIKE '%.t' THEN r.resourceid::text END, ',')
    ) AS "Resource IDs",

    /* Resource Names */
    CONCAT(
        STRING_AGG(CASE WHEN r.resourcename LIKE '%.s' THEN r.resourcename END, ','),
        CASE 
            WHEN COUNT(CASE WHEN r.resourcename LIKE '%.s' THEN 1 END) > 0 
             AND COUNT(CASE WHEN r.resourcename LIKE '%.t' THEN 1 END) > 0
            THEN ','
            ELSE ''
        END,
        STRING_AGG(CASE WHEN r.resourcename LIKE '%.t' THEN r.resourcename END, ',')
    ) AS "Resource Names"

FROM (
    SELECT 
        resourceid,
        resourcename,
        CASE 
            WHEN POSITION('.' IN resourcename) > 0
            THEN LEFT(resourcename, POSITION('.' IN resourcename) - 1)
            ELSE resourcename
        END AS base_name
    FROM resources
) r

GROUP BY base_name
HAVING COUNT(*) > 1;

2. 导出的文件内容格式如下,然后将 IDs里的IP分割为两个IP对,格式如下

重复资产的序列对(资产的ciid)格式如下:
const reconcileInfo = [
    [8434081, 161923],
    [8432051, 162262],
    [8455581, 161921],
    [10885191, 161909],
    [5241361, 162210],
    [5983461, 162513],
    [331, 162240]
];

3. 然后到系统中找到两个同类型的资产进行协调操作,同时在浏览器空白处右键选择Inspect(开发者工具)点击到network页签,执行完毕搜索ajax


4. 在上图的AJaxServlet上右键,然后选择 Copy中的Copy as fetch

5. 再在下面的代码中,用复制的代码替换红色的部分,并将“body" 的绿色部分照搬里面只写body,再将第二步得到的完整序列对替换下面蓝色字体的部分
// Step 1: Define an array where each element contains two numbers (resource1 and resource2)
const reconcileInfo = [
    [100000002,100000006]// Add more pairs as needed
];
const assetType='custom_asset_computer';
// Step 2: Define an async function to send fetch requests with a delay after every 75 requests
async function sendRequests() {
for (let i = 0; i < reconcileInfo.length; i++) {
    const [resource1, resource2] = reconcileInfo[i];
    // Prepare request body with dynamic values
    const body = `action=reconcile&resource1=${resource1}&resource2=${resource2}&assetType=${assetType}`;    
    try {
        // Invoke fetch request
        const response = await fetch("https://demo.servicedeskplus.com/servlet/AJaxServlet", {
  "headers": {
    "accept": "*/*",
    "accept-language": "en,zh-CN;q=0.9,zh;q=0.8",
    "content-type": "application/x-www-form-urlencoded;charset=UTF-8",
    "portalid": "301",
    "sec-ch-ua": "\"Not:A-Brand\";v=\"99\", \"Google Chrome\";v=\"145\", \"Chromium\";v=\"145\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-zcsrf-token": "sdpcsrfparam=622e7a82b50f622ebe76122ea8690a54c94806834263be9d3e5d6950c0d9273ab491c69fad362fc973f904ef5cd13d99329f4277a5fdf196c2ca503cbcbc447c"
  },
  "body": body,
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});
        console.log(`Request ${i + 1} completed for resource1=${resource1}, resource2=${resource2}`);
        } catch (error) {
            console.error(`Error in request ${i + 1}:`, error);
        }
 
        // Step 3: After every 75 requests, pause for 1 minute (60000ms)
        if ((i + 1) % 75 === 0) {
            console.log("Pausing for 1 minute after 75 requests...");
            await new Promise(resolve => setTimeout(resolve, 60000));
            console.log("Resuming requests...");
        }
    }
}

6. 打开sdp管理员登录页到资产页签,浏览器开发者工具的console页签,光标处黏贴入编辑好的代码,回车后返回执行结果,完成后可以在系统查看是否重复的资产已经协调完毕




    • Related Articles

    • 【SDP OP】Microsoft O365邮箱使用EWS-Oauth协议配置突然报Unknown error

      如果用户配置的O365邮箱是使用的EWS-Oauth协议配置的,突然报异常,unknown error occurred, 重新配置,在重定向到SDP, 输入用户名密码后OauthServlet页面无法正常加载的前提下,搜索日志会发现下面报错 [08:26:48:570]|[09-26-2025]|[SYSERR]|[INFO]|[27153]: java.lang.Exception: {"error_description":"AADSTS700003: Device object was ...
    • 使用.pfx证书将OpManager与SDP集成

      在SDP中应用.pfx证书不涉及创建集成所需的密钥库文件。请按照以下步骤创建密钥库文件。 将文件OpManager.TrustStore和SDP PFX文件放置在OpManager JRE\bin安装下。 1.运行以下命令,在OpManager\Jre\bin目录将pfx证书转换为JKS格式。 >keytool -importkeystore -srckeystore sdp_pfx_cert.p12 -destkeystore OpManager.truststore ...
    • sdp & msp 系统服务目录使用细节

      sdp & msp 系统服务目录使用细节 1  有关系统服务目录能否看到的问题,需要两块来定义 首先进入到服务目录中,每个服务目录定义出都有一块内容叫做:关联技术支持组到模板&显示给请求人_关联用户组到模板。意思为此技术支持组下及此用户组下的所有人可以对应看到这些服务目录。(这一块建议可以选择多个需要看的组) 2 ...
    • ADSSP报“您的账户已被限制使用,请联系您的管理员”,怎么排错?

      报错截图: 1.查看策略里面是否包含了这个ou下的用户,如果策略没有应用到这个用户,这个用户是会被限制使用 2.查看这个用户是否是在受限用户里面,如果是在受限用户里,也会报这个错 3.查看身份验证报表里是否有这个账号 4.使用此账号登录本地AD域,看能否正常登录。 5.域设置里面更新对象 6.1中的策略配置重新勾选下OU,并重试。 7.如果以上都不行,请联系support@manageengine.cn
    • SDP升级步骤&注意事项

      SDP升级步骤: 1 服务中找到ManageEngine ServiceDesk Plus停止服务。如为linux服务,则bin目录中执行shutdown.sh以停止服务。 2 以管理员方式运行命令提示符,定位到SDP安装目录的bin目录下,执行UpdateManager.bat (UpdateManager.sh Linux中),将会在页面弹出升级窗口。 3 单击“浏览”以选择 Service Pack ...